如果我执行以下操作:
parseInt(parseFloat(9.20)*100*1)/100 // returns 9.19
当我希望它返回9.20时,它返回9.19我需要更改什么才能让它返回正确的值?
当我将其更改为:
时,我遇到了同样的问题parseInt(parseFloat(9.12)*100*1)/100 // returns 9.11
但任何其他价值都可行:
parseInt(parseFloat(9.30)*100*1)/100 // returns 9.30 (correct)
更新:
解决方案是:
(Math.round(9.20*100*1)/100).toFixed(2)
答案 0 :(得分:1)
问题是,由于浮点错误,Javascript中的9.20*100
会返回919.9999999999999
而不是920
。当你对parseInt()
进行操作时,它不会舍入到最近的int,而是将其截断为919
,这就是为什么你的最终答案是错误的。
不使用parseInt()
,而是使用Math.round()
更好的方法。此方法舍入到最近的int,将919.99999
转换为920
,为您提供正确的答案。
答案 1 :(得分:0)
因为JavaScript使用二进制算术,所以浮点数学是基数10结果的近似值。
避免这种情况的一种方法是执行积分数学运算,但是将小数乘以一个足够大的因子,将它们转换为整数,然后将答案分成相同的因子。
在这种情况下,我不确定您使用parseInt()
或parseFloat()
的原因,因为您首先不使用字符串。
最后,当您使用parseInt()
时,建议使用第二个(可选)参数并提供基数(用于执行操作的基础数字系统),因为您可以在返回时获得不正确的值要解析的字符串以“0”或“0x”开头。
var result = parseInt(9.2*10, 10)/10 // returns 9.19
console.log(result);