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


Answers:


371

如果它们是单独的值,请尝试以下操作:

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

如果它们是单个值(例如法语,其中一半写为0.5)

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

6
逗号用作千位分隔符怎么办?例如1234写为1,234
克里斯·B

6
您可以只删除逗号,然后解析它。(例如,将其替换为“”)
Jesse Rusak,2009年

7
这不是很安全,因为sconto = parseFloat(“ 5,,5” .replace(“,”,“。”))); 返回5个前导
字母

1
@ max4ever如果您担心无声地接受无效数字,则可以使用,+(string)而不要使用parseString(string)下面的@Stev所建议的方法。因此,第一个示例将是v1 = +(values[0]); v2 = +(values[1]);
杰西·鲁萨克

1
失败,如果我的电话号码是怎么办6.000.000。函数替换仅替换第一个逗号分隔符
GusDeCooL 2013年

55

您是否曾经尝试过这样做?:p

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

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

便利!

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

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

7
我真的很喜欢+(str)解决方案- parseFloat忽略数字后的无效字符,在这种情况下+(str)返回NaN,这正是我所需要的。
亚历克斯(Alex)

34

用点替换逗号。

这只会返回554:

var value = parseFloat("554,20")

这将返回554.20:

var value = parseFloat("554.20")

因此,最后,您可以简单地使用:

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

别忘了,它parseInt()只能用于解析整数(无浮点数)。在您的情况下,它将仅返回554。此外,在float上调用parseInt()不会舍入该数字:它将取其底值(最接近的下整数)。


扩展示例以从评论中回答Pedro Ferreira的问题:

如果文本字段包含成千上万个分隔符,则1.234.567,99可以事先用另一个分隔符消除它们replace

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

怎么样呢 ”。” 千位分隔符?像4.554,20一样会返回...?
Pedro Ferreira 2015年

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"

10
尽管通常认为修改基础对象原型是不好的形式。如果另一个框架也尝试这样做但功能不同怎么办?
phreakhead

3

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

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

1
是的,没有正则表达式的替换只会替换一次出现的字符。
Aukhan

2

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

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


By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.