引子
在做关于钱的项目的时候,特别是钱很多的时候,经常要对货币进行格式化。如下图:
画红圈的货币,是三位一隔,对货币数字进行了拆分,那么这个是如何做到的呢?下面分享一下货币格式化的函数。
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兼容性不太好