如何在JavaScript中将字符串转换为float?

时间:2009-03-13 13:17:20

标签: javascript parsing floating-point

我正在尝试从数据网格中解析两个值。字段是数字的,当它们有逗号(例如554,20)时,我无法得到逗号后面的数字。我试过了parseIntparseFloat。我怎么能这样做?

8 个答案:

答案 0 :(得分:337)

如果它们是单独的值,请尝试:

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

如果它们意味着单一价值(如法语,其中一半写为0,5)

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

答案 1 :(得分:49)

你有没有试过这样做? :P

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

+(string)会将字符串转换为float。

手持!

因此,为了解决您的问题,您可以执行以下操作:

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

答案 2 :(得分:31)

用点替换逗号。

这只会返回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,那么可以事先用另一个replace删除它们:

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

答案 3 :(得分:16)

如果像这样扩展String对象..

String.prototype.float = function() { 
  return parseFloat(this.replace(',', '.')); 
}

..你可以像这样运行它

"554,20".float()
> 554.20

也适用于dot

"554.20".float()
> 554.20

typeof "554,20".float()
> "number"

答案 4 :(得分:3)

@GusDeCool或其他任何试图替换超过一千个分隔符的人,其中一种方法是使用正则表达式全局替换:/foo/g。请记住,.是元字符,因此您必须将其转义或放在括号中(\.[.])。这是一个选项:

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

答案 5 :(得分:3)

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

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

答案 6 :(得分:0)

我有同样的问题,除了我事先不知道千位分隔符和小数分隔符是什么。我最后写了一个库来做这件事。如果您对此感兴趣,请点击:https://github.com/GuillaumeLeclerc/number-parsing

答案 7 :(得分:0)

尝试

let str ="554,20";
let float = +str.replace(',','.');
let int = str.split(',').map(x=>+x);

console.log({float,int});