如何使用JavaScript格式化数字?

Kan*_*ela 7 javascript localization

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

10.00=10,00 
1,000.00=1.000,00
Run Code Online (Sandbox Code Playgroud)

And*_*y E 18

每个浏览器都支持Number.prototype.toLocaleString(),一种用于从数字返回本地化字符串的方法.但是,规范将其定义如下:

生成一个字符串值,该值表示根据主机环境的当前语言环境的约定格式化的Number的值.这个函数是依赖于实现的,它允许但不鼓励它返回相同的东西toString.

依赖于实现意味着由供应商决定结果的外观,并导致互操作性问题.

Internet Explorer(IE 5.5到IE 9)最接近您的需要,并以货币样式格式化数字 - 千位分隔符并固定为2位小数.

Firefox(2+)使用千位分隔符和小数位格式化数字,但仅在适用的情况下.

Opera,Chrome和Safari输出相同toString()- 只有在需要时才有千位分隔符,小数位.

我想出了以下代码(基于我的旧答案)来尝试将结果规范化,使其像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);
Run Code Online (Sandbox Code Playgroud)

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

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

  • 我投票支持这个解决方案,因为它支持正确的本地化.我们中的一些人使用小数逗号代替点:-) (3认同)
  • @PatrickKlug:感谢您指出,我原本没有考虑否定,也没有测试它们.我现在修好了:-) (3认同)

小智 5

我知道这个使用 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
Run Code Online (Sandbox Code Playgroud)


Spu*_*ley 1

Javascript 本身不提供此功能,但有许多第三方函数可以完成您想要的操作。

请注意,无论您使用哪种方法,您都应该小心,仅将结果字符串用于显示目的——将小数点转换为逗号后,它就不再是 Javascript 中的有效数值。

我能提供的最快的解决方案是使用number_format()phpJS 人员编写的函数。他们已经实现了一系列常用 PHP 函数的 Javascript 版本,其中包括number_format(),并且该函数将完全满足您的需求。

请参阅此处的链接: http: //phpjs.org/functions/number_format

我不会费心去获取整个 phpJS 库(无论如何,其中很多都具有可疑的价值),但只需获取上面链接的页面上显示的 20 多行函数并将其粘贴到您的应用程序中即可。

如果你想要一个更灵活的解决方案,有许多 JS 函数可以模拟printf()C 函数。SO 上已经有一个很好的问题涵盖了这一点。请参阅此处:相当于 printf/string.format 的 JavaScript

希望有帮助。