我试图从数据网格解析两个值。字段是数字,当它们有逗号(例如554,20)时,我无法获得逗号后的数字。我试过parseInt和parseFloat。我该怎么做呢?


当前回答

用点代替逗号。

这只会返回554:

var value = parseFloat("554,20")

这将返回554.20:

var value = parseFloat("554.20")

所以最后,你可以简单地使用:

var fValue = parseFloat(document.getElementById("textfield").value.replace(",","."))

不要忘记parseInt()应该只用于解析整数(不能解析浮点数)。在你的例子中,它只会返回554。此外,在浮点数上调用parseInt()将不会四舍五入该数字:它将取其底数(最接近的较低整数)。


扩展的例子来回答Pedro Ferreira的问题:

如果文本字段包含数千个分隔点,如1.234.567,99,这些可以通过另一个替换提前消除:

var fValue = parseFloat(document.getElementById("textfield").value.replace(/\./g,"").replace(",","."))

其他回答

你试过这样做吗?: p

var str = '3.8';ie
alert( +(str) + 0.2 );

+(字符串)将字符串转换为浮点数。

方便的!

所以为了解决你的问题,你可以这样做:

var floatValue = +(str.replace(/,/,'.'));

@GusDeCool或任何人试图替换超过一千个分隔符,一种方法是一个regex全局替换:/foo/g。记住这一点。是元字符,因此必须转义或将其放在括号中(\。或[])。这里有一个选择:

var str = '6.000.000';
str.replace(/[.]/g,",");

我遇到了同样的问题,只是我事先不知道千位分隔符和小数点分隔符是什么。我最终编写了一个库来实现这个功能。如果你感兴趣,请访问:https://github.com/GuillaumeLeclerc/number-parsing

如果它们是单独的值,试试这个:

var values = "554,20".split(",")
var v1 = parseFloat(values[0])
var v2 = parseFloat(values[1])

如果它们是单个值(比如在法语中,1 / 2写成0,5)

var value = parseFloat("554,20".replace(",", "."));

您可以使用此功能。它将用' '替换逗号,然后它将parsefloat值,之后它将再次调整value中的逗号。

function convertToFloat(val) {
        if (val != '') {
            if (val.indexOf(',') !== -1)
                val.replace(',', '');
            val = parseFloat(val);
            while (/(\d+)(\d{3})/.test(val.toString())) {
                val = val.toString().replace(/(\d+)(\d{3})/, '$1' + ',' + '$2');
            }
        }
        return val;
    }