我将浮点数格式化为区域设置字符串(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
答案 0 :(得分:3)
ECMA 262指定该函数是依赖于实现的,不带参数。
生成一个String值,表示格式化的Number值 根据主机环境的当前语言环境的约定。 此函数是依赖于实现的,并且是允许的,但是 不鼓励,因为它返回与toString相同的东西。
注意此函数的第一个参数可能用于a 该标准的未来版本;建议 实现不会将此参数位置用于其他任何位置。
它也在ECMA internationalization API specification(Number.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