parseFloat返回NaN

时间:2015-08-05 10:34:26

标签: javascript jquery

我试图摆脱货币符号以便使用parseFloat计算新价格,但由于某种原因它会返回nan。

var pricePerUser = "£19.99";
pricePerUser = parseFloat(pricePerUser) * 3;
console.log(pricePerUser); //Returns NaN

5 个答案:

答案 0 :(得分:3)

parseFloat()将处理字符串,直到找到非数字值。 £是第一个字符,因此没有要解析的数字。在致电parseFloat()之前,您需要将其删除:

var pricePerUser = "£19.99";
pricePerUser = parseFloat(pricePerUser.replace('£', '')) * 3;
console.log(pricePerUser);

如果您需要2DP精度,请使用toFixed(2)

console.log(pricePerUser.toFixed(2));

答案 1 :(得分:3)

ByteBuffer从字符串的开头开始,一直持续到数字符号用完为止。

由于第一个字符不是数字,它会立即停止并返回parseFloat

Use substr(或NaN等)代替删除符号。

replace

答案 2 :(得分:1)

因为pricePerUser不是浮点数,所以它被视为字符串。你已经在javascript中使用拆分或替换删除了符号£并结束了你的方法

var pricePerUser = "£19.99";
pricePer = parseFloat(pricePerUser.split("£")[1]) * 3;
console.log(pricePer); 

答案 3 :(得分:0)

由于字符串包含字母,parseFloat会返回NaN

您可以使用regex替换除数字和. - 小数点之外的所有其他字符。并对其进行数学运算。

var pricePerUser = "£19.99".replace(/[^0-9.+-]/g, '') * 3;

document.write(pricePerUser);

答案 4 :(得分:0)

pricePerUser不是一个带有货币符号的数字,你需要在使用parseFloat之前从var中删除任何字符。

var pricePerUser = "£19.99";
pricePerUser.replace(/[-+]?(\d*[.])?\d+/,'');
console.log(pricePerUser);