我发现toLocaleString函数很奇怪。
以下行将返回0.003
:
alert(0.0031.toLocaleString(2))
此行将返回0
:
alert(0.00031.toLocaleString(2))
为什么?
答案 0 :(得分:1)
这不是方法toLocaleString的有效参数。
您可以像这样使用minimumFractionDigits参数:
var res = 0.00031.toLocaleString(undefined, {minimumFractionDigits: 4});
console.log(res);
答案 1 :(得分:0)
toLocaleString
不是Number
的{{1}}方法的有效参数。您只能传递一个区域设置,它是一个字符串,以及一个选项对象。
除其他外,可以使用选项对象来指定小数位数:
number.toLocaleString(undefined, { maximumFractionDigits: 4 })
它的默认值恰好是3:
<强> maximumFractionDigits 强>
要使用的最大小数位数。 可能的值为0到20;普通数字的默认值 格式是minimumFractionDigits和3中较大的一个;默认 货币格式是minimumFractionDigits和更大的 ISO 4217货币代码提供的次要单位数字的数量 列表(如果列表没有提供该信息,则为2);默认值 格式百分比是minimumFractionDigits和0中的较大者。
答案 2 :(得分:0)
toLocaleString将十进制数截断并舍入为小数点后的3位数。
0.0005.toLocaleString()
例如,将返回0.001。 作为方法参数传入的2不会做任何事情。
答案 3 :(得分:0)
toLocaleString()方法返回一个字符串,其中包含此编号的语言敏感表示。
numObj.toLocaleString([locales [,options]])有两个参数。
var num = 0.00031;
console.log(num.toLocaleString(undefined, {minimumFractionDigits: 2, maximumFractionDigits: 2}));
console.log(num.toLocaleString(undefined, { maximumFractionDigits: 4}));
&#13;
答案 4 :(得分:0)
参数中的数字2没有任何区别。 toLocaleString返回一个字符串,其中包含数字的语言敏感表示。
在问题的第二种情况下,基本上0.000
等于0
console.log("Passing argument " + 0.0031.toLocaleString(2))
console.log("Without argument " + 0.0031.toLocaleString())
console.log("Zeros " + 0.000)
答案 5 :(得分:0)
number.toLocaleString()返回数字的语言敏感表示。在您的情况下,您首先不会传递任何区域设置信息,并且您没有告诉此函数您的最大分数限制是多少。
参见此示例
ROW_NUMBER
答案 6 :(得分:0)
根据spec,toLocaleString的前两个参数是locale
和options
使用可选参数调用toLocaleString方法时 语言环境和选项,采取以下步骤:
当此API获得值2或3时,它首先尝试resolve locales,如果未在supported locales内找到检查。
根据format the number的区域设置,已解析的区域设置将用作Common Locale Data Repository的有效区域设置。
注意建议实现使用区域设置数据 由Common Locale Data Repository提供(可从以下网站获得: http://cldr.unicode.org/)。
locales参数必须是包含BCP 47语言的字符串 标记或此类语言标记的数组。如果locales参数不是 提供或未定义,使用运行时的默认语言环境。
BCP 47语言标签定义了一种语言,最低限度包含一种语言 主要语言代码。在其最常见的形式中,它可以包含,在 order:语言代码,脚本代码和国家或地区代码, 所有用连字符分隔。虽然标签不区分大小写,但它是 建议对脚本代码使用标题大小写,对国家/地区使用大写 区域代码和其他一切的小写。
最后,根据BCP47 logic中根据所提及语言的各种属性注册的区域设置,执行查找以根据IANA language subtag registry找到所支持区域设置的最佳匹配。
2
与任何支持的区域设置都不匹配,因此系统环境中的默认最大分数来自available value(在您的a page about Unicode character ranges中显示为3情况)。
因此你得到了
0.00031.toLocaleString(2) //"0"
0.0031.toLocaleString(2) //"0.003"