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

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

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

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

使用jQuery和jQuery UI。 Number(string)返回NaN,并且parseFloat()在第一个空格或逗号处停止。

8个解决方案
44 votes

首先进行替换:

parseFloat(str.replace(',','.').replace(' ',''))
hytest answered 2020-08-01T16:58:22Z
20 votes

完美的解决方案

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

检查此为参考

Shafiq answered 2020-08-01T16:58:51Z
17 votes

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

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}$更改为与小数点后的期望值相匹配的值,以适应您的特定用例。

Thor84no answered 2020-08-01T16:59:21Z
9 votes

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

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

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

Alex Turpin answered 2020-08-01T16:59:45Z
7 votes

这是最好的解决方案

[HTTP://numeral JS.com/]

numeral().unformat('0.02'); = 0.02
stuartchaney answered 2020-08-01T17:00:09Z
6 votes

关于什么:

parseFloat(str.replace(' ', '').replace('.', '').replace(',', '.'));
lpinto.eu answered 2020-08-01T17:00:31Z
4 votes

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

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,
        };

欢迎提出建议。

Slawa answered 2020-08-01T17:01:01Z
-1 votes

通过Number.prototype.toLocaleString,从数字到货币字符串很容易。 然而,相反的情况似乎是一个普遍的问题。 在JS标准中可能无法获得千位分隔符和小数点。

在这个特定的问题中,千位分隔符是一个空格2992444249456756772096,但是在许多情况下,它可以是一个句点2992444249473573549312,小数点可以是一个逗号2992444249473573549313(例如1.000.000,00或2992444249473573515),然后这就是我将其转换为合适的浮点数的方式 数。

p1 = ""

因此,替换回调函数将接收2992444249473573549312并将其转换为p1 = ","。之后,生成的字符串前面的1.000.000,00将其强制转换为数字。

该功能实际上非常方便。 例如,如果您在回调函数中将2992444249449473549312部分替换为p1 = ",",则输入1.000.000,00将导致1,000,000.00

Redu answered 2020-08-01T17:01:35Z
translate from https://stackoverflow.com:/questions/7431833/convert-string-with-dot-or-comma-as-decimal-separator-to-number-in-javascript