我想使用javascript格式化数字,如下所示:
10.00=10,00
1,000.00=1.000,00
答案 0 :(得分:18)
每个浏览器都支持Number.prototype.toLocaleString()
,这是一种从数字中返回本地化字符串的方法。但是,规范将其定义如下:
生成一个字符串值,该值表示根据主机环境的当前语言环境的约定格式化的Number的值。此函数是依赖于实现的,允许但不鼓励它返回与
toString
相同的内容。
依赖于实现意味着由供应商决定结果的外观,并导致互操作性问题。
Internet Explorer (IE 5.5到IE 9)最接近您想要的格式并以货币样式格式化数字 - 千位分隔符并固定为2位小数。
Firefox (2+)将数字格式化为千位分隔符和小数位,但仅在适用的情况下。
Opera,Chrome& Safari 输出与toString()
相同 - 仅在需要时没有千位分隔符,小数位
我提出了以下代码(基于an old answer of mine)来尝试将结果规范化,以便像Internet Explorer的方法一样工作:
(function (old) {
var dec = 0.12 .toLocaleString().charAt(1),
tho = dec === "." ? "," : ".";
if (1000 .toLocaleString() !== "1,000.00") {
Number.prototype.toLocaleString = function () {
var neg = this < 0,
f = this.toFixed(2).slice(+neg);
return (neg ? "-" : "")
+ f.slice(0,-3).replace(/(?=(?!^)(?:\d{3})+(?!\d))/g, tho)
+ dec + f.slice(-2);
}
}
})(Number.prototype.toLocaleString);
这将使用浏览器的内置本地化(如果可用),同时在其他情况下优雅地降级到浏览器的默认语言环境。
答案 1 :(得分:3)
我使用NumberFormat知道这个解决方案,但有必要将值转换为字符串。 https://developer.mozilla.org/es/docs/Web/JavaScript/Referencia/Objetos_globales/NumberFormat
// Remove commas
number = "10,000.00".replace(/,/g, '');
// Create a NumberFormat type object
var formatter = new Intl.NumberFormat('de-DE', {
minimumFractionDigits: 2
});
// Apply format
console.log(formatter.format(number));
output:10.000,00
答案 2 :(得分:1)
Javascript本身不提供此功能,但有许多第三方功能可以做到你想要的。
注意,无论使用哪种方法,都应该小心只使用结果字符串进行显示 - 在将小数点转换为逗号后,它不会是Javascript中的有效数字值。
我能提供的最快解决方案是使用phpJS人员编写的number_format()
函数。他们已经实现了一系列常用PHP函数的Javascript版本,包括number_format()
,这个函数将完全按照您的意愿执行。
请参阅此处的链接:http://phpjs.org/functions/number_format
我不打扰整个phpJS库(其中很多都是值得怀疑的),但只需抓住上面链接的页面上显示的20多行函数并将其粘贴到您的应用程序中。
如果你想要一个更灵活的解决方案,有许多JS函数围绕它来模拟来自C的printf()
函数。已经有一个很好的问题,SO涵盖了这一点。见这里:JavaScript equivalent to printf/string.format
希望有所帮助。