在做一个和金融有关的系统,里面牵涉到金额数字这些东西,希望能在格式化后更适合阅读。
答案更新:
今天看到有人赞了这个答案,老问题还有人在看也是受宠若惊,就更新下答案吧。
最近这些日子我也碰到了相关的问题,发现其实自带的 Number 就能帮助我们解决这个问题。使用
(10000).toLocaleString('en-US');
就可以帮我们按照三位数加上逗号,如果使用
(10000).toLocaleString('en-US', {style: 'currency', currency: 'USD'});
还可以帮我们加上 $
前缀,简单方便。
更多使用方法可以参考 https://developer.mozilla.org... ,另外这个 IE11 才支持哦~
我是老答案
PHP里头有number_format函数可以对数字进行格式化,然后我找了一个JS版的number_format函数,感觉还不错。
但是我觉得这个太强大了,只是要加个逗号什么的没必要,就自己写了一个。JS新手,用PHP的思路写的JS,可能不是最好的,不过确定是可以用的,希望能帮到你。
function number_format(num, format) {
if(num.length <= 3) return num;
if (num.length % 3 == 0) {
count = num.length/3;
}else{
count = (num.length-num.length%3)/3;
}
var text = '';
for(i=0;i<count;i++) {
if((count-i-1)*3+num.length%3!=0) {
text=format+num.slice((count-i-1)*3+num.length%3,(count-i-1)*3+num.length%3+3)+text;
}else {
text=num.slice((count-i-1)*3+num.length%3,(count-i-1)*3+num.length%3+3)+text;
}
}
return num.slice(0,num.length % 3)+text;
}
在不少地方看过这个问题,没有看到特别满意的答案。
主要原因:
在此分享一下我的答案,全当抛砖引玉,不足的地方欢迎指正。
function formatNumber(num, precision, separator) {
var parts;
// 判断是否为数字
if (!isNaN(parseFloat(num)) && isFinite(num)) {
// 把类似 .5, 5. 之类的数据转化成0.5, 5, 为数据精度处理做准, 至于为什么
// 不在判断中直接写 if (!isNaN(num = parseFloat(num)) && isFinite(num))
// 是因为parseFloat有一个奇怪的精度问题, 比如 parseFloat(12312312.1234567119)
// 的值变成了 12312312.123456713
num = Number(num);
// 处理小数点位数
num = (typeof precision !== 'undefined' ? num.toFixed(precision) : num).toString();
// 分离数字的小数部分和整数部分
parts = num.split('.');
// 整数部分加[separator]分隔, 借用一个著名的正则表达式
parts[0] = parts[0].toString().replace(/(\d)(?=(\d{3})+(?!\d))/g, '$1' + (separator || ','));
return parts.join('.');
}
return NaN;
}
测试:
formatNumber(10000)
"10,000"
formatNumber(10000, 2)
"10,000.00"
formatNumber(10000.123456, 2)
"10,000.12"
formatNumber(10000.123456, 2, ' ')
"10 000.12"
formatNumber(.123456, 2, ' ')
"0.12"
formatNumber(56., 2, ' ')
"56.00"
formatNumber(56., 0, ' ')
"56"
formatNumber('56.')
"56"
formatNumber('56.a')
NaN
function numFormat(num) {
var c = (num.toString().indexOf ('.') !== -1) ? num.toLocaleString() : num.toString().replace(/(\d)(?=(?:\d{3})+$)/g, '$1,');
return c;
}
8 回答4.6k 阅读✓ 已解决
6 回答3.3k 阅读✓ 已解决
5 回答2.8k 阅读✓ 已解决
5 回答6.3k 阅读✓ 已解决
4 回答2.2k 阅读✓ 已解决
4 回答2.7k 阅读✓ 已解决
3 回答2.4k 阅读✓ 已解决
javascript数字格式化通用类——accounting.js使用:http://www.ithr.org.cn/blogs/blog1.ph...
分享5个javascript的数字格式化函数:http://www.ithr.org.cn/blogs/blog1.ph...