如何格式化干净的数字,使 1000 显示为 1.000,00 [重复]
Posted
技术标签:
【中文标题】如何格式化干净的数字,使 1000 显示为 1.000,00 [重复]【英文标题】:How to format clean numbers so 1000 appear as 1.000,00 [duplicate] 【发布时间】:2013-10-18 21:24:50 【问题描述】:我目前有一些干净的数字,例如:
1, 10, 100, 1000, 10000
等等...
我希望格式化这些数字,因此它们显示为:
1,00
10,00
100,00
1.000,00
10.000,00
我玩过n.toFixed(2);
,但似乎不支持我正在寻找的格式。
有什么想法吗?
【问题讨论】:
JS 没有原生的“花式”数字格式化功能。你必须自己动手,或者找一个预制的库来模拟 sprintf() 之类的。 第三方脚本可以接受吗? 任何事情都可以接受,目前我不知道该怎么做——但这是一个小脚本,所以突然不得不包含其他大型库是不行的——但我都是倾听解决方案:) "How to print a number with commas as thousands separators in javascript" 有您正在寻找的答案。 【参考方案1】:查看 Intl.NumberFormat(),不需要花哨的裤子插件。跨平台支持。
var number = 3500;
alert(new Intl.NumberFormat().format(number));
会弹出“3,500”
【讨论】:
您也可以提供locales
参数以根据OP 的需要交换逗号和小数。 Intl.NumberFormat("de-DE")
不幸的是,浏览器的支持不是很好...Support: Chrome 24, IE 11, Opera 15
既然你链接了 Mozilla 文档,我会冒昧地猜测 Firefox 也受支持?
来自 Mozilla 链接:Firefox (Gecko)、Safari (Webkit) - 不支持【参考方案2】:
如果你想要一个简单的函数来完成这项工作,以下可能适合:
// Format a number n using:
// p decimal places (two by default)
// ts as the thousands separator (comma by default) and
// dp as the decimal point (period by default).
//
// If p < 0 or p > 20 results are implementation dependent.
function formatNumber(n, p, ts, dp)
var t = [];
// Get arguments, set defaults
if (typeof p == 'undefined') p = 2;
if (typeof ts == 'undefined') ts = ',';
if (typeof dp == 'undefined') dp = '.';
// Get number and decimal part of n
n = Number(n).toFixed(p).split('.');
// Add thousands separator and decimal point (if requied):
for (var iLen = n[0].length, i = iLen? iLen % 3 || 3 : 0, j = 0; i <= iLen; i+=3)
t.push(n[0].substring(j, i));
j = i;
// Insert separators and return result
return t.join(ts) + (n[1]? dp + n[1] : '');
//*
console.log(formatNumber(
1234567890.567, // value to format
4, // number of decimal places
'.', // thousands separator
',' // decimal separator
)); // result: 1.234.567.890,5670
//*/
console.log(formatNumber(
123.567, // value to format
1 // number of decimal places
)); // result: 123.6
console.log(formatNumber(
'123.567', // value to format
0 // number of decimal places
)); // result: 123.6
console.log(formatNumber(
123, // value to format
0 // number of decimal places
)); // result: 123
console.log(formatNumber(
13, // value to format
2 // number of decimal places
)); // result: 13.00
console.log(formatNumber(
0 // value to format
// number of decimal places
)); // result: 0.00
console.log(formatNumber(
// value to format
// number of decimal places
)); // result: NaN
抱歉,没有花哨的正则表达式或切片/拼接数组的东西,只有 POJS 可以工作。
【讨论】:
我喜欢有用的东西!这很准确,完全符合我的需要。第一个 console.log 示例为我完成了它。我爱你! :)【参考方案3】:你可以这样做:
var nb='1000000000';
var result = nb.replace(/(?:(^\d1,3)(?=(?:\d3)*$)|(\d3))(?!$)/mg, '$1$2.')+',00';
【讨论】:
【参考方案4】:在 JS 中没有用于格式化数字的内置方法。您可以为此使用 autoNumeric。 http://www.decorplanit.com/plugin/
【讨论】:
【参考方案5】:我不知道你的情况,但我想使用angularJS。
它完全符合您的要求,而且还有更多额外的动态格式。
更新:专门研究本地化功能。如果您需要,它甚至可以提供多元化服务。
【讨论】:
除非您指向执行此操作的特定功能,否则它将为 -1。 并且为数字格式加载 Angular 过多。 @KarolyHorvath 嘿,我已经按照你的要求做了,我只想贡献一份力量。 @Jasen 就像我说的,我不知道他的情况。 我很快就会在另一个解决方案中研究 Angular,所以那时就看一下这个,所以总是很高兴知道那里的选项。谢谢以上是关于如何格式化干净的数字,使 1000 显示为 1.000,00 [重复]的主要内容,如果未能解决你的问题,请参考以下文章