如何在JavaScript中使用localeString获取货币代码和金额之间的空间?

时间:2018-03-16 16:32:34

标签: javascript localization currency

我必须使用基于国家/地区的逗号和句点分隔符的国家/地区代码以货币格式显示数字。

如果数字是4294967295000那么

  1. 美国= USD 4,294,967,295,000.00
  2. INDIA = 42,94,96,72,95,000.00
  3. 我让它在印度工作,但对于美国我得到这个字符串,但我需要货币代码和数字之间的空格:

    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”和数字之间的间距?我没有看到任何关于空间的选项参数。我可以编写自定义代码来添加空间,但我试图看看是否有更好的选择来做同样的事情。

2 个答案:

答案 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,其中之一是:

  
      
  1. 如果s是"货币",那么
      一个。设c应按6.1中的规定将c转换为大写   湾将numberFormat。[[currency]]设置为c。
  2.   

这意味着,无论您以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步说:

  
      
  1. 如果numberFormat。[[style]]的值为" currency",则
      的一个。设货币为numberFormat。[[货币]]的值   湾如果numberFormat。[[currencyDisplay]]是"代码",那么
      一世。让cd成为货币。
      C。否则,如果numberFormat。[[currencyDisplay]]是"符号",那么
      一世。设cd是表示简短形式货币的ILD字符串。如果实施没有这种货币表示,那么使用货币本身   d。否则,如果numberFormat。[[currencyDisplay]]是" name",那么
      一世。设cd是表示长格式货币的ILD字符串。如果实施没有这种货币表示,那么使用货币本身   即替换子字符串" {currency}"在结果中使用cd
  2.   

强调我的,显示在这种情况下采取的步骤。

TL; DR - 此行为似乎取决于浏览器,如果您一直想要空间,那么您自己需要解析并修复生成的字符串,没有内置 - 这样做。