【问题标题】:How do I convert String to Number according to locale javascript如何根据语言环境将字符串转换为数字
【发布时间】:2018-10-19 11:05:53
【问题描述】:

如果我这样做:

var number = 35000.25; alert(number.toLocaleString("de-DE")); 我会收到德语版的35.000,25

但是我怎样才能将它转换回35000.25 或者我想要类似的东西:

var str='35.000,25'; alert(str.toLocaleNumber("en-US")); 所以,它可以给35,000.25

JS可以吗?

【问题讨论】:

标签: javascript angular


【解决方案1】:

以下函数将首先根据给定的语言环境构造一个 NumberFormat。然后它将尝试找到该语言的小数分隔符。

最后它将替换给定字符串中除小数点分隔符之外的所有分隔符,然后将依赖于语言环境的分隔符替换为默认点并将其转换为数字。

function convertNumber(num, locale) {
  const { format } = new Intl.NumberFormat(locale);
  const [, decimalSign] = /^0(.)1$/.exec(format(0.1));
  return +num
    .replace(new RegExp(`[^${decimalSign}\\d]`, 'g'), '')
    .replace(decimalSign, '.');
}

// convertNumber('100,45', 'de-DE')
// -> 100.45

请记住,这只是一个快速的概念证明,并且可能/将会因不遵循此处假设的更多异国语言环境而失败(例如,从左到右、没有奇怪的数字插入、没有空格、没有符号等等)。

但是你可以调整这个...

【讨论】:

  • 谢谢,但我也在寻找法国数字格式(包含空格),例如:var str='35 000,25'; alert(str.toLocaleNumber("en-US"));所以,它可以给 35,000.25
  • 您可以轻松地使脚本适应这些内容。
【解决方案2】:

我知道这有点晚了,但未来的读者可能会觉得这很有帮助。几个月前,我和我的团队遇到了完全相同的问题,我们需要在更“异国情调”的语言环境(例如印度)中以通用方式将字符串转换为数字。因此,我们创建了一个基本的 Javascript 库,它完全可以做到这一点并将其开源。它叫做locale-to-number.js,你可以在这里找到它:https://github.com/fromScratchStudioGr/locale-to-number.js

它目前支持大多数可用的语言环境,而其余的语言环境也即将实现。

干杯!

【讨论】:

    猜你喜欢
    • 2014-10-28
    • 1970-01-01
    • 2016-05-02
    • 2021-01-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多