Number()。toLocaleString()在不同的浏览器中具有不同的格式

时间:2015-04-29 11:22:08

标签: javascript formatting numbers

我将浮点数格式化为区域设置字符串(Euro),并且每个浏览器都有非常不同的结果。没有自己的功能可以修复吗?

var sum=2282.0000;
var formated_sum = Number(sum.toFixed(2)).toLocaleString("de-DE", {style: "currency", currency: "EUR"});

Firefox结果:2.282,00€

Chrome结果:2.282€

IE结果:2.282,00€

Safari结果:2282€

Safari结果非常错误,Chrome结果并没有那么糟糕。 任何想法如何解决这个问题而不编写自己的格式化函数?

这个问题可能已经有了答案: toLocaleString()在不同浏览器中的行为不一致 不,我的问题不同,因为我正在寻找货币的解决方案,而不是DATE

1 个答案:

答案 0 :(得分:3)

ECMA 262指定该函数是依赖于实现的,不带参数。

  

生成一个String值,表示格式化的Number值   根据主机环境的当前语言环境的约定。   此函数是依赖于实现的,并且是允许的,但是   不鼓励,因为它返回与toString相同的东西。

     

注意此函数的第一个参数可能用于a   该标准的未来版本;建议   实现不会将此参数位置用于其他任何位置。

它也在ECMA internationalization API specificationNumber.prototype.toLocaleString取代ECMA 262但接受2个参数)

  

该定义取代了ES5,15.7.4.3中提供的定义。

     

使用可选参数调用toLocaleString方法时   语言环境和选项,采取以下步骤:

     

设x为此Number值(如ES5,15.7.4中所定义)。如果是语言环境   没有提供,那么让locales不定义。如果选项不是   提供,然后让选项不确定。让numberFormat成为   创建一个新对象的结果,就像表达式new一样   Intl.NumberFormat(locales,options),其中Intl.NumberFormat是   11.1.3中定义的标准内置构造函数。返回结果   使用调用FormatNumber抽象操作(在11.3.2中定义)   参数numberFormat和x。长度属性的值   toLocaleString方法是0。

此外,mdn指定Safari不支持它。

至于可行的解决方案,请参阅SO {/ p>上的this answer