我试图摆脱货币符号以便使用parseFloat计算新价格,但由于某种原因它会返回nan。
var pricePerUser = "£19.99";
pricePerUser = parseFloat(pricePerUser) * 3;
console.log(pricePerUser); //Returns NaN
答案 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);