javascript - 如何根据语言环境将字符串转换为数字
问题描述
如果我做:
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可以吗?
解决方案
以下函数将首先根据给定的语言环境构造一个 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
请记住,这只是一个快速的概念证明,并且可能/将会因不遵循此处假设的更多异国语言环境而失败(例如,从左到右,没有奇怪的数字插入,没有空格,没有符号等) .
但是,您可以调整此...
推荐阅读
- r - 匹配特定列中的前一行并在 R 中执行计算
- spring-mvc - MyBatis 没有关闭 Prepared Statement
- flutter - MaterailApp 小部件没有优雅地缓动
- php - 在 Laravel 中调用字符串上的成员函数 any()
- python - MultiValueDictKeyError 请求方法:GET (Django)
- microsoft-graph-api - /groups 的 MS graph webhook 订阅,不包括成员资格更改?
- npm - package.json 中“npm:@user/package-name”版本的 NPM 等效项?
- laravel - 在 laravel 5.7.29 的本地主机上发送网格发送电子邮件失败
- python - 使用 gnu 编译器/默认 C++ 库在 Raspberry Pi 4 上安装 Opencv 时出现问题
- firebase-hosting - Firebase 自定义域:之后旧域会发生什么?