javascript toLocaleString返回0

javascript toLocaleString返回0,javascript,Javascript,我发现toLocaleString函数非常奇怪 以下行将返回0.003: alert(0.0031.toLocaleString(2)) 此行将返回0: alert(0.00031.toLocaleString(2)) 为什么?2不是编号的toLocaleString方法的有效参数。只能传递区域设置(字符串)和选项对象 除其他外,选项对象可用于指定分数位数: number.toLocaleString(undefined, { maximumFractionDigits: 4 }) 它的默

我发现toLocaleString函数非常奇怪

以下行将返回
0.003

alert(0.0031.toLocaleString(2))
此行将返回
0

alert(0.00031.toLocaleString(2))

为什么?

2
不是
编号的
toLocaleString
方法的有效参数。只能传递区域设置(字符串)和选项对象

除其他外,选项对象可用于指定分数位数:

number.toLocaleString(undefined, { maximumFractionDigits: 4 })
它的默认值正好是3:

最大分数位数

要使用的最大小数位数。 可能的值为0到20;纯数字的默认值 格式化是最小分数位数和3中的较大值;默认值 对于货币格式,最小分数位数和 ISO 4217货币代码提供的次要单位位数 列表(如果列表未提供该信息,则为2);默认的 百分比格式是最小分数位数和0中的较大值


toLocaleString将小数截断并舍入为小数后的3位数字

0.0005.toLocaleString() 
例如,将返回0.001。
作为方法参数传入的2不起任何作用。

这不是ToLocalString方法的有效参数

您可以像这样使用minimumFractionDigits参数:

var res=0.00031.toLocaleString(未定义,{minimumFractionDigits:4});
控制台日志(res)toLocalString()方法返回一个字符串,其中包含此数字的语言敏感表示形式

tolocalString([locales[,options]])有两个参数

参考文献

var num=0.00031;
log(num.toLocaleString(未定义,{minimumFractionDigits:2,maximumFractionDigits:2}));

log(num.toLocaleString(未定义,{maximumFractionDigits:4}))参数中的数字2没有任何区别。返回具有数字的语言敏感表示形式的字符串

在问题的第二种情况下,它基本上是
0.000
,等于0

console.log(“传递参数”+0.0031.toLocaleString(2))
log(“无参数”+0.0031.toLocaleString())
console.log(“零”+0.000)
number.toLocaleString()返回数字的语言敏感表示形式。在本例中,您首先不传递任何区域设置信息,也不告诉此函数您的最大分数限制是多少

看这个例子

0.0003.toLocaleString(undefined, {minimumFractionDigits: 2})
"0.00"
0.0003.toLocaleString(undefined, {minimumFractionDigits: 3})
"0.000"
0.0003.toLocaleString(undefined, {minimumFractionDigits: 4})
"0.0003
根据,toLocalString的前两个参数是
locale
options

使用可选参数调用toLocaleString方法时 在区域设置和选项中,将采取以下步骤:

当此API接收到值2或3时,它首先尝试检查,如果未在中找到检查

已解析的区域设置将用作有效的区域设置,以根据

注意:建议实现使用区域设置数据 由公共语言环境数据存储库提供(可在 )

依照

locales参数必须是包含BCP 47语言的字符串 标记,或此类语言标记的数组。如果locales参数不是 如果提供或未定义,则使用运行时的默认区域设置

BCP 47语言标记定义一种语言,并至少包含一个 主要语言代码。以其最常见的形式,它可以包含 顺序:语言代码、脚本代码和国家或地区代码, 全部由连字符分隔。虽然标记不区分大小写,但它是 建议脚本代码使用标题大小写,国家/地区使用大写 还有地区代码和小写字母

最后,执行查找以根据所述语言的各种属性从支持的语言环境中查找最适合的语言环境

2
与任何受支持的区域设置都不匹配,因此,根据您的系统环境使用默认的最大分数位数(在您的情况下似乎是3)

因此你得到了

0.00031.toLocaleString(2) //"0"

0.0031.toLocaleString(2) //"0.003"