Javascript 有没有办法在ECMAscript国际化API中获取十进制和千位分隔符?
我正在尝试使用新的,并且想知道是否有一种方法可以获取Javascript 有没有办法在ECMAscript国际化API中获取十进制和千位分隔符?,javascript,internationalization,number-formatting,ecmascript-5,ecmascript-intl,Javascript,Internationalization,Number Formatting,Ecmascript 5,Ecmascript Intl,我正在尝试使用新的,并且想知道是否有一种方法可以获取Intl.NumberFormat实例的十进制和千(分组)分隔符 对象上有一个方法,但它不提供符号 如果有人想知道,那么对于en-US,这些将是逗号,和句点,例如1000.00恐怕ECMA-402标准没有定义允许您访问分隔符的API。还有另一个问题——目前ECMA-402的采用并不像我们希望的那样广泛 因此,就目前而言,如果我是你,我会通过getDecimalSeparator()和getGroupingSeparator()函数查找类似于或的
Intl.NumberFormat
实例的十进制和千(分组)分隔符
对象上有一个方法,但它不提供符号
如果有人想知道,那么对于en-US,这些将是逗号
,
和句点
,例如1000.00
恐怕ECMA-402标准没有定义允许您访问分隔符的API。还有另一个问题——目前ECMA-402的采用并不像我们希望的那样广泛
因此,就目前而言,如果我是你,我会通过getDecimalSeparator()
和getGroupingSeparator()
函数查找类似于或的信息。顺便说一句,iLib似乎使用CLDR作为信息源。如果没有其他信息,作为一种技巧解决方案(不通过土耳其测试;请参阅注释),您可以使用的输出来确定有关区域设置中数字格式的信息。对于当前区域设置,例如:
var decimalSeparator =
(12345.6789).toLocaleString().match(/345(.*)67/)[1];
var thousandSeparator =
(12345.6789).toLocaleString().match(/12(.*)345/)[1];
var numberOfDecimals =
(12345.6789).toLocaleString().match(/345(\D*)(\d+)$/)[2].length;
同样的技巧也可用于货币格式化,例如使用
(12345.6789).toLocaleString(“en-GB”,{style:“currency”})
positivePattern
是否有用?如果没有其他问题,您始终可以看到已知数字的实际解析结果。:)@bzlm解析解析的模式是我想到的一个选项。例如,格式化一个已知的数字,例如1000.50
并在数字1
后面的字符处检查分组(千)分隔符,以及在最后一个0
和数字5
前面的字符之间检查十进制分隔符。这正是我在没有其他可用分隔符时所做的(但使用12345.6789)。我发现它通常工作得很好。思考得好。使用不同的数字应该会使它更简单。但是,如何让JavaScript在当前语言环境中为您提供数字的字符串版本?parseFloat(12345.6789)。toString()
只是发出12345.6789…我们会寻找12345.6789,对吗?这可能与我最终使用的方法类似,但值得注意的是,这可能会与不打印1234等的区域设置发生冲突。例如,使用“ar”1234=£٢٤٤