是否可以在JS中使用千位分隔符将语言环境字符串转换为十进制数字?

时间:2018-10-15 16:56:31

标签: javascript parsing locale

我正试图找到一种方法,将Number.toLocaleString()输出的字符串转换为带有千位和十进制分隔符的浮点数。问题是我找不到在任何语言环境中都可以使用的方法:中文数字每4位数字有一个分隔符,印度数字以3开始,然后每2位数字,德语分隔符与英语完全相反,法语分隔符为空格数以千计的...

这基本上是我想要的:

Indian : '10,00,00,123' => '100000.123'
French : '123 456,789' => '123456.789'

有没有可以做到这一点的图书馆?在使用

解析之前,我确实具有语言环境
  

navigator.language

如果有帮助

预先感谢

更新:这是我想出的,它对于阿拉伯数字非常有用:

let localeString = '123,45,67,89.57982';

console.log(reformat(localeString));

function reformat(str) {
    let rawNumber;
    let decimalIndex;
    let charToRemove = 0;
    for (let i = 0; i < str.length; i++) {
        if (!isNaN(str[i])) {
            //concatenating numbers
            rawNumber = parseInt(`${rawNumber ? rawNumber : ''}${str[i]}`);
        } else {
            decimalIndex = i;
            charToRemove++;
        }
    }

    return format(rawNumber, decimalIndex, charToRemove);
}

function format(number, decimalIndex, charToRemove) {
    if (decimalIndex) {
        // Adding decimal to the right place
        return number / Math.pow(10, number.toString().length - decimalIndex + charToRemove - 1);
    } else {
        return number;
    }
}

编辑:它无法按预期工作,因为无法知道分隔符是十进制还是一千(无法用千位分隔符与十进制数来区分整数)

3 个答案:

答案 0 :(得分:1)

一次在字符串中遍历一个字符,检查该字符是否为数字,将其添加到字符串中,并以指定的时间间隔插入所需的字段分隔符(也许逗号为3)?

答案 1 :(得分:0)

也许此工具会为您提供帮助! accounting.js

我敢肯定,您也可以使用parseFloat和条件语句自己弄清楚它,但是您是对的,当有许多可用的库时,这可能不值得。

答案 2 :(得分:0)

您可以获取语言环境的小数点分隔符,然后相应地删除千位分隔符。此时,您有一个带小数点的十进制值。

然后您可以将值正确解析为十进制。

let localeString = reformat('123,45,67,89.57982');

reformat(str) {
str = str.replace(/\s/, '');

let locale = 'fr-FR';

if(getLocaleDecimalSeparator(locale) === ',')
	str = str.replace(/\./g, '').replace(/,/, '.');
else if(getLocaleDecimalSeparator(locale) === '.')
	str = str.replace(/,/g, '');

return parseFloat(str);
}

getLocaleDecimalSeparator(locale) {
 let n = 1.1;
 //returns `,` or `.`
 return n.toLocaleString(locale).substring(1, 2);
}