首页 > 解决方案 > 如何根据语言环境将字符串转换为数字

问题描述

如果我做:

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可以吗?

标签: javascriptangular

解决方案


以下函数将首先根据给定的语言环境构造一个 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

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

但是,您可以调整此...


推荐阅读