【问题标题】:How to format numbers using JavaScript?如何使用 JavaScript 格式化数字?
【发布时间】:2011-05-04 11:58:56
【问题描述】:

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

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

【问题讨论】:

标签: javascript localization


【解决方案1】:

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

生成一个字符串值,该值表示根据宿主环境当前语言环境的约定格式化的数字值。此函数依赖于实现,允许但不鼓励它返回与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 - 只是一个警告:需要修复以正确处理负数。当前 -100 返回 -,100.00 例如。
  • 只是为了清楚。要查看您需要调用的问题 (-100).toLocaleString()
  • @PatrickKlug:感谢您指出,我最初没有考虑负面因素,也没有测试它们。我现在已经修好了:-)
  • 将本地化号码转换回来怎么样?
【解决方案2】:

我知道此解决方案使用 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

【讨论】:

    【解决方案3】:

    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

    希望对您有所帮助。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-06-07
      • 2012-05-08
      • 1970-01-01
      • 2014-04-18
      • 2020-07-18
      相关资源
      最近更新 更多