我在网络的某个过程中遇到了问题,经过一段时间寻找问题,我可以发现发生了什么,现在我有一个问题,为什么会发生?
实施例: 下面是一个代码示例:
function DoSomething(number, divisor){
var result = number % divisor;
var minimumAllowed = 0;
if(result == minimumAllowed){
.... Do stuff
}
}
当代码传递参数时,number = 1000和divisor = 0.2,我可以重现这个问题。
这是mozilla控制台中的问题:
1000 % .2 = 0.1999999999999445
1000 / .2 = 5000
我认为1000 % .2 = 0
,而不是0.1999999999999445
所以1000 / .2 is 5000
。
非常感谢解释。
答案 0 :(得分:1)
问题不在于javascript,而是处理器处理浮点数的方式。
基本上每个浮点运算都会带来数学错误的成本,通常非常小,当你添加,乘法等等时,但是一旦你需要检查某些东西是否相等就会变得非常痛苦,就像在这种情况下一样
如果您尝试使用整数值的代码(尝试10000%2),您应该得到正确的答案。