JS对货币格式化,js钱三位一隔,javascript货币格式化

35463次浏览

引子

在做关于钱的项目的时候,特别是钱很多的时候,经常要对货币进行格式化。如下图:

enter image description here

画红圈的货币,是三位一隔,对货币数字进行了拆分,那么这个是如何做到的呢?下面分享一下货币格式化的函数。

JS对货币格式化函数

/**
 * 将数值四舍五入(保留2位小数)后格式化成金额形式
 *
 * @param num 数值(Number或者String)
 * @return 金额格式的字符串,如'1,234,567.45'
 * @type String
 */
function formatCurrency(num) {
    num = num.toString().replace(/\$|\,/g,'');
    if(isNaN(num))
        num = "0";
    sign = (num == (num = Math.abs(num)));
    num = Math.floor(num*100+0.50000000001);
    cents = num%100;
    num = Math.floor(num/100).toString();
    if(cents<10)
    cents = "0" + cents;
    for (var i = 0; i < Math.floor((num.length-(1+i))/3); i++)
    num = num.substring(0,num.length-(4*i+3))+','+
    num.substring(num.length-(4*i+3));
    return (((sign)?'':'-') + num + '.' + cents);
}

上面的方法是保留2为小数,下面的是保留一位小数。

/**
 * 将数值四舍五入(保留1位小数)后格式化成金额形式
 *
 * @param num 数值(Number或者String)
 * @return 金额格式的字符串,如'1,234,567.4'
 * @type String
 */
function formatCurrencyTenThou(num) {
    num = num.toString().replace(/\$|\,/g,'');
    if(isNaN(num))
    num = "0";
    sign = (num == (num = Math.abs(num)));
    num = Math.floor(num*10+0.50000000001);
    cents = num%10;
    num = Math.floor(num/10).toString();
    for (var i = 0; i < Math.floor((num.length-(1+i))/3); i++)
    num = num.substring(0,num.length-(4*i+3))+','+
    num.substring(num.length-(4*i+3));
    return (((sign)?'':'-') + num + '.' + cents);
}

下面是不保留小数:

    function formatPrice(n) {
        var t = parseInt(n), i, r;
        for (t = t.toString().replace(/^(\d*)$/, "$1."), t = (t + "00").replace(/(\d*\.\d\d)\d*/, "$1"), t = t.replace(".", ","), i = /(\d)(\d{3},)/; i.test(t); )
            t = t.replace(i, "$1,$2");
        return t = t.replace(/,(\d\d)$/, ".$1"), r = t.split("."), r[1] == "00" && (t = r[0]), t
    }

js/javascript货币格式化函数,希望对你有所帮助。

黑科技

利用toLocaleString

(123456789).toLocaleString('en-US')  // 1,234,567,890

其他用法:

(123456789).toLocaleString('zh-hans-CN-u-nu-hanidec',{useGrouping:false})  
//"一二三四五六七八九"
(123456789).toLocaleString('zh-hans-CN-u-nu-hanidec',{useGrouping:true})  
//"一二三,四五六,七八九"
new Date().toLocaleString('zh-hans-CN-u-nu-hanidec')  
//"二〇一八/一/三一 下午八:五四:五一"


export function toThousandslsFilter(num) {
  return (+num || 0).toString().replace(/^-?\d+/g, m => m.replace(/(?=(?!\b)(\d{3})+$)/g, ','))
}

利用Intl

关于intl,具体请看:https://developer.mozilla.org/zh-CN/docs/Web/JavaScript/Reference/Global_Objects/Intl

new Intl.NumberFormat().format(1234567890) // 1,234,567,890

优点:简单粗暴,直接调用 API
缺点:Intl兼容性不太好

Tags: jsjavascript

相关文章: