如何使用JavaScript格式化数字?

时间:2011-05-04 11:58:56

标签: javascript localization

我想使用javascript格式化数字,如下所示:

10.00=10,00 
1,000.00=1.000,00

3 个答案:

答案 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);

这将使用浏览器的内置本地化(如果可用),同时在其他情况下优雅地降级到浏览器的默认语言环境。

工作演示:http://jsfiddle.net/R4DKn/49/

答案 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

希望有所帮助。