我必须使用基于国家/地区的逗号和句点分隔符的国家/地区代码以货币格式显示数字。
如果数字是4294967295000那么
我让它在印度工作,但对于美国我得到这个字符串,但我需要货币代码和数字之间的空格:
var number = 4294967295000;
console.log(number.toLocaleString('en-IN', {
style: 'currency', currency: 'INR', currencyDisplay: 'code'
})); // INR 42,94,96,72,95,000.00
console.log(number.toLocaleString('en-US', {
style: 'currency', currency: 'USD', currencyDisplay: 'code'
})); // USD4,294,967,295,000.00
如何实现“USD”和数字之间的间距?我没有看到任何关于空间的选项参数。我可以编写自定义代码来添加空间,但我试图看看是否有更好的选择来做同样的事情。
答案 0 :(得分:1)
如果它是一个可靠的模式,你要修复的是一个三字母代码,后跟一个数字,并且你想通过插入一个空格来修复它,你可以像这样使用这个正则表达式:
currencyStr = currencyStr.replace(/^([A-Z]{3})(\d)/, (match, $1, $2) => $1 + ' ' + $2);
答案 1 :(得分:1)
我没有看到任何关于空间的选项参数。
所以我把兔子的洞打开了。
当您将选项传递到toLocaleString
时,它会执行许多步骤。首先,它将传入的选项转换为NumberFormat
对象。它goes through a series of steps to do so,其中之一是:
- 如果s是"货币",那么
醇>
一个。设c应按6.1中的规定将c转换为大写 湾将numberFormat。[[currency]]设置为c。
这意味着,无论您以currency
选项传入的内容,只要它是正确的货币代码,都会转换为大写并存储在内部currency
属性中在NumberFormat
对象上。
然后我们看到在NumberFormat
上使用了其他internal properties - 在这种情况下,特别是positivePattern
内部广告位。规范说明:
这些属性的值必须是包含子字符串的字符串值" {number}&#34 ;;货币属性中的值还必须包含子串" {currency}"。模式字符串不得包含“通用类别”中的任何字符“数字,十进制数字"由Unicode标准规定。
IE注意到,在这一点上,对于给定的文化,我们创建了一个有效地具有{currency} {number}
行格式字符串的对象。仅在Chrome(至少)美元的情况下,它是{currency}{number}
。请注意,在IE和Edge中,您获得了USD之后的空格,因此它决定使用格式字符串{currency} {number}
。
接下来,我们到达actual implementation of formatting the number。第7步说:
- 如果numberFormat。[[style]]的值为" currency",则
醇>
的一个。设货币为numberFormat。[[货币]]的值 湾如果numberFormat。[[currencyDisplay]]是"代码",那么
一世。让cd成为货币。
C。否则,如果numberFormat。[[currencyDisplay]]是"符号",那么
一世。设cd是表示简短形式货币的ILD字符串。如果实施没有这种货币表示,那么使用货币本身 d。否则,如果numberFormat。[[currencyDisplay]]是" name",那么
一世。设cd是表示长格式货币的ILD字符串。如果实施没有这种货币表示,那么使用货币本身 即替换子字符串" {currency}"在结果中使用cd 。
强调我的,显示在这种情况下采取的步骤。
TL; DR - 此行为似乎取决于浏览器,如果您一直想要空间,那么您自己需要解析并修复生成的字符串,没有内置 - 这样做。