it-swarm.cn

将带点或逗号作为小数点分隔符的字符串转换为JavaScript中的数字

输入元素包含数字a,其中逗号或点用作小数点分隔符,空格可用于分组成千上万个,如下所示:

'1,2'
'110 000,23'
'100 1.23'

如何使用JavaScript在浏览器中将它们转换为浮点数?

使用jQuery和jQuery UI。 Number(string)返回NaN,而parseFloat()返回第一个空格或逗号。

42
Andrus

首先进行替换:

parseFloat(str.replace(',','.').replace(' ',''))
44
hytest

完美的解决方案

accounting.js是一个小型的JavaScript库,用于数字,货币和货币格式设置。

检查参考

19
Shafiq

我知道我参加聚会很晚,但是我想要一个解决方案,可以正确处理数字分组以及货币的不同小数点分隔符。由于这些都没有完全涵盖我的用例,因此我编写了自己的解决方案,这可能对其他人有用:

function parsePotentiallyGroupedFloat(stringValue) {
    stringValue = stringValue.trim();
    var result = stringValue.replace(/[^0-9]/g, '');
    if (/[,\.]\d{2}$/.test(stringValue)) {
        result = result.replace(/(\d{2})$/, '.$1');
    }
    return parseFloat(result);
}

这应去除所有非数字,然后检查是否有小数点(或逗号)后跟两个数字,并在需要时插入小数点。

值得注意的是,我是专门针对货币而设计的,因此它假设没有小数位或正好是两位。除非您知道当前语言环境的详细信息,否则很难确定遇到的第一个可能的小数点是小数点还是数字分组字符(例如,1.542可能是1542),但是通过将\d{2}$更改为与小数点后的期望值完全匹配的方式,应该很容易根据您的特定用例进行调整。

16
Thor84no

您可以将所有空格替换为一个空字符串,将所有逗号替换为点,然后对其进行解析。

var str = "110 000,23";
var num = parseFloat(str.replace(/\s/g, "").replace(",", "."));
console.log(num);

我在第一个中使用了正则表达式,以便能够匹配所有空间,而不仅仅是第一个。

9
Alex Turpin

这是最好的解决方案

http://numeraljs.com/

numeral().unformat('0.02'); = 0.02
7
stuartchaney

关于什么:

parseFloat(str.replace(' ', '').replace('.', '').replace(',', '.'));
6
lpinto.eu

所有其他解决方案都需要您事先了解格式。我需要在每种情况下都检测(!)格式,这就是我最终得到的结果。

function detectFloat(source) {
    let float = accounting.unformat(source);
    let posComma = source.indexOf(',');
    if (posComma > -1) {
        let posDot = source.indexOf('.');
        if (posDot > -1 && posComma > posDot) {
            let germanFloat = accounting.unformat(source, ',');
            if (Math.abs(germanFloat) > Math.abs(float)) {
                float = germanFloat;
            }
        } else {
            // source = source.replace(/,/g, '.');
            float = accounting.unformat(source, ',');
        }
    }
    return float;
}

在以下情况下对此进行了测试:

        const cases = {
            "0": 0,
            "10.12": 10.12,
            "222.20": 222.20,
            "-222.20": -222.20,
            "+222,20": 222.20,
            "-222,20": -222.20,
            "-2.222,20": -2222.20,
            "-11.111,20": -11111.20,
        };

欢迎提出建议。

4
Slawa