如何在 JavaScript 中将字符串转换为浮点数?
Posted
技术标签:
【中文标题】如何在 JavaScript 中将字符串转换为浮点数?【英文标题】:How to convert string into float in JavaScript? 【发布时间】:2022-01-16 18:28:35 【问题描述】:我正在尝试从数据网格中解析两个值。这些字段是数字的,当它们有逗号(例如 554,20)时,我无法得到逗号后面的数字。我试过parseInt
和parseFloat
。我该怎么做?
【问题讨论】:
另见: ***.com/questions/24318654 【参考方案1】:如果它们是单独的值,试试这个:
var values = "554,20".split(",")
var v1 = parseFloat(values[0])
var v2 = parseFloat(values[1])
如果它们是一个单一的值(比如在法语中,一半写成 0,5)
var value = parseFloat("554,20".replace(",", "."));
【讨论】:
用逗号作为千位分隔符的地方怎么样?例如。 1234 写成 1,234 您可以删除逗号,然后解析它。 (例如,用“”替换它) 这不是很安全,因为 sconto = parseFloat("5,,5".replace(",", "."));返回 5 前导一个认为它是一个有效数字,但你失去了 .5 部分,或者你可以认为它不是一个有效数字 @max4ever 如果您担心默默地接受无效数字,您可以使用+(string)
而不是parseString(string)
,如下面的@Stev 建议的那样。所以,第一个例子是v1 = +(values[0]); v2 = +(values[1]);
。
失败,如果我的号码是 6.000.000
。函数替换只替换第一个逗号分隔符【参考方案2】:
你有没有试过这样做? :p
var str = '3.8';ie
alert( +(str) + 0.2 );
+(string) 将字符串转换为浮点数。
好用!
所以为了解决你的问题,你可以这样做:
var floatValue = +(str.replace(/,/,'.'));
【讨论】:
我真的很喜欢+(str)
解决方案 - parseFloat
忽略数字后的无效字符,+(str)
在这些情况下返回 NaN
,这正是我所需要的。【参考方案3】:
用点替换逗号。
这只会返回 554:
var value = parseFloat("554,20")
这将返回 554.20:
var value = parseFloat("554.20")
所以最后,你可以简单地使用:
var fValue = parseFloat(document.getElementById("textfield").value.replace(",","."))
不要忘记parseInt()
应该只用于解析整数(没有浮点数)。在您的情况下,它只会返回 554。此外,在浮点数上调用 parseInt() 不会对数字进行四舍五入:它将占用它的下限(最接近的低整数)。
从 cmets 回答 Pedro Ferreira 的问题的扩展示例:
如果文本字段包含数千个分隔点,例如 1.234.567,99
,则可以使用另一个 replace
预先消除这些点:
var fValue = parseFloat(document.getElementById("textfield").value.replace(/\./g,"").replace(",","."))
【讨论】:
“。”呢?千位分隔符?比如 4.554,20 会返回什么...?【参考方案4】:如果你像这样扩展 String 对象..
String.prototype.float = function()
return parseFloat(this.replace(',', '.'));
..你可以这样运行
"554,20".float()
> 554.20
也适用于点
"554.20".float()
> 554.20
typeof "554,20".float()
> "number"
【讨论】:
虽然通常认为修改基础对象原型是不好的形式。如果另一个框架也尝试这样做但功能不同怎么办?【参考方案5】:@GusDeCool 或任何其他试图替换超过一千个分隔符的人,一种方法是正则表达式全局替换:/foo/g
。请记住,.
是一个元字符,因此您必须对其进行转义或将其放在括号中(\.
或[.]
)。这是一种选择:
var str = '6.000.000';
str.replace(/[.]/g,",");
【讨论】:
是的,没有正则表达式的替换只会替换出现的字符。【参考方案6】:您可以使用此功能。它将用 ' ' 替换逗号,然后它将 parseFlaot 值,然后再次调整值中的逗号。
function convertToFloat(val)
if (val != '')
if (val.indexOf(',') !== -1)
val.replace(',', '');
val = parseFloat(val);
while (/(\d+)(\d3)/.test(val.toString()))
val = val.toString().replace(/(\d+)(\d3)/, '$1' + ',' + '$2');
return val;
【讨论】:
【参考方案7】:如果有人正在寻找从任意字符串中解析 float 的方法,
可以这样做:
function extractFloat(text)
const match = text.match(/\d+((\.|,)\d+)?/)
return match && match[0]
extractFloat('some text with float 5.25') // 5.25
【讨论】:
【参考方案8】:我遇到了同样的问题,只是我事先不知道千位分隔符和小数点分隔符是什么。我最终写了一个库来做到这一点。如果您对此感兴趣,请点击这里:https://github.com/GuillaumeLeclerc/number-parsing
【讨论】:
【参考方案9】:试试
let str ="554,20";
let float = +str.replace(',','.');
let int = str.split(',').map(x=>+x);
console.log(float,int);
【讨论】:
以上是关于如何在 JavaScript 中将字符串转换为浮点数?的主要内容,如果未能解决你的问题,请参考以下文章