Javascript的toFixed本地化?

39

你知道 toFixed 函数是否具有本地化的特性吗?

我的意思是,这个函数是否与语言环境相关:

var n = 100.67287;
alert(n.toFixed(2));

如何在美国英语操作系统/浏览器上显示"100.67",并在意大利或其他使用逗号作为小数点分隔符的本地操作系统/浏览器上以"100,67"的形式显示?

谢谢!


1
请查看Number.toLocaleString() - Alex K.
对于任何寻找React Native解决方案的人:https://dev59.com/bLTma4cB1Zd3GeqPzgR_#56243866 - Freewalker
4个回答

46
追加说明:使用Number.toLocaleString()可在除了IE 10及以下版本外的所有浏览器上运行,虽然这种方法较为冗长:

var n = 100.67287;
console.log(n.toLocaleString(undefined, {
  minimumFractionDigits: 2,
  maximumFractionDigits: 2
}));

使用 undefined 或“ default”作为语言代码将使用浏览器默认语言格式化数字。

有关完整详细信息,请参见 developer.mozilla.org/en/docs/Web/JavaScript/Reference/Global_Objects/Number/toLocaleString

如果您可以自由扩展Number原型,则可以定义 Number.toLocaleFixed()。


1
尽管有些冗长,但这是我迄今为止看到的最佳解决方案。 - anastaciu
或者简单地使用 n.toFixed(2).toLocaleString()。 - dataman
或者简单地使用 n.toFixed(2).toLocaleString()。 - undefined
@dataman 这是不同的:Number.prototype.toLocaleString会根据区域设置格式化小数点,例如将"100.67287"格式化为"100,67287"。而toFixed则绕过了这一点,始终使用.作为小数点。你的建议将使用String.prototype.toLocaleString,但它不再了解n的数值属性。 - Sebastian Simon
@dataman 这是不同的:Number.prototype.toLocaleString会根据语言环境格式化小数点,例如,使用逗号分隔的形式"100,67287"而不是"100.67287"toFixed则绕过了这一点,始终使用.作为小数点。你的建议将使用String.prototype.toLocaleString,但它不再了解n的数值属性。 - undefined

28

不,这将始终返回一个点。 ECMA 262 规范 [15.7.4.5] 指出应该是一个点。


这个链接已经失效了,而且有“太多待处理的编辑”,所以这是一个更新的链接:https://www.ecma-international.org/publications-and-standards/standards/ecma-262/ - undefined

0
你可以使用这个:
var n = 100.67287;
alert(parseFloat(n.toFixed(2)).toLocaleString());

在我的德语系统上,结果是

100,67

8
这是一个巧妙的技巧,但是对于100.00将无法正确工作,这会通过toLocaleString()的结果变成"100"。 - Chris Dolan
仅用于显示目的-跳过parseFloat并保留为字符串。 - dataman
仅用于显示目的-跳过parseFloat并保留为字符串。 - undefined

-1

很遗憾,纯jQuery/JavaScript没有真正的解决方案。您需要使用Globalize。问题在于toFixed()和toLocaleString()都接受一个数字并返回一个字符串。因此,您永远无法将它们一起使用。:( 如果您调用foo.toFixed(2).toLocaleString(),您将无法获得本地化(即en中的'1.234'应为fr中的'1,234'),因为它正在处理toFixed()的结果,而toFixed()是一个字符串,而不是一个数字。:(


3
自ECMAScript 2015(ed.6)以来,已经指定了对ECMA-402国际化API的支持,因此这个答案不再适用,因为Number.prototype.toLocaleString可以根据ChrisV的答案指定语言特定格式和小数位数。 - RobG

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接