【问题标题】:Is there a way to get the decimal and thousands separator in ECMAscript Internationalization API?有没有办法在 ECMAscript 国际化 API 中获取小数点和千位分隔符?
【发布时间】:2014-11-01 14:11:15
【问题描述】:

我正在尝试使用新的Javascript internationalization API,并想知道是否有办法为Intl.NumberFormat 实例获取小数和千位(分组)分隔符?

对象上有一个resolvedOptions 方法,但不提供符号。

如果有人想知道,那么对于 en-US,这些将是逗号 , 和句点 .,例如 1,000.00

【问题讨论】:

  • positivePattern 有用吗?如果不出意外,您总是可以看到已知数字实际解析为什么。 :)
  • @bzlm 解析解析的模式是我想到的一个选项。例如,格式化一个已知数字,例如 1000.50 并检查数字 1 之后的字符是否为分组(千)分隔符,以及最后一个 0 和数字 @987654332 之前的字符@ 为小数点分隔符。
  • 这正是我在没有其他可用的情况下所做的(但使用 12345.6789)。我发现它通常效果很好。
  • 好主意。使用不同的数字应该更简单。
  • 你如何让 JavaScript 在当前语言环境中为你提供数字的字符串版本? parseFloat(12345.6789).toString() 只是发出 12345.6789... 我们会寻找 12,345.6789 对吗?

标签: javascript internationalization number-formatting ecmascript-5 ecmascript-intl


【解决方案1】:

如果没有别的,作为一个技巧解决方案(没有通过土耳其测试;请参阅评论),您可以使用toLocaleString() 的输出来确定有关区域设置中数字格式的信息.对于当前语言环境,例如:

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" })

【讨论】:

  • 这可能类似于我最终将使用的方法,但值得注意的是,这可能会与不打印出 1234 等的语言环境中断。例如,使用 'ar' 1234 = ١٢٣٤
【解决方案2】:

恐怕 ECMA-402 标准没有定义让您访问分隔符的 API。还有另一个问题 - 目前 ECMA-402 的采用并不像我们希望的那样广泛。

因此,目前,如果我是你,我会通过 LocaleInfo's getDecimalSeparator()getGroupingSeparator() 函数查看 CLDR JSON bindingsiLib 之类的信息。
顺便提一句。 iLib 似乎使用 CLDR 作为信息来源。

【讨论】:

    猜你喜欢
    • 2012-11-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-01-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多