javascript toLocaleString返回0

时间:2017-11-02 05:58:18

标签: javascript

我发现toLocaleString函数很奇怪。

以下行将返回0.003

alert(0.0031.toLocaleString(2))

此行将返回0

alert(0.00031.toLocaleString(2))

为什么?

7 个答案:

答案 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]])有两个参数。

参考https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Number/toLocaleString

&#13;
&#13;
    var num = 0.00031;
    console.log(num.toLocaleString(undefined, {minimumFractionDigits: 2, maximumFractionDigits: 2}));
    console.log(num.toLocaleString(undefined, { maximumFractionDigits: 4}));
&#13;
&#13;
&#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的前两个参数是localeoptions

  

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

当此API获得值2或3时,它首先尝试resolve locales,如果未在supported locales内找到检查。

根据format the number的区域设置,已解析的区域设置将用作Common Locale Data Repository的有效区域设置。

  

注意建议实现使用区域设置数据   由Common Locale Data Repository提供(可从以下网站获得:   http://cldr.unicode.org/)。

根据documentation

  

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"