可能重复:
为什么十进制数不能用二进制精确表示?
浮动值的问题
$var1 = 1;
for ( $i=0; $i<30; $i++ ) {
$var1 += 0.1;
$var2 = floor($var1);
$var3 = $var1-$var2;
if ( $var3 == 0.5 ) {
$var1 = $var2+1;
}
}
这个循环的目的是计数1.0、1.1、1.2、1.3、1.4,然后跳转到2.0、2.1、2.2等
我遇到的问题是该if
陈述永远不会正确。此外,每十分之一的计算都会得出一些疯狂的科学答案。
我该如何解决?请帮忙!
编辑:我有点沮丧地匆忙写了这个问题,而且不止一个,我现在明白了。
问题的第一部分确实是“我怎样才能绕过这个浮点怪癖来完成这项工作”和“为什么会发生这种怪癖!”
感谢您的所有出色回复,我将答案投票为正确,这很容易回答了“如何使这项工作”这一核心问题。
使用 0.49 代替 0.5 和 > 代替 == 就可以了。粗糙而不是世界上最好的代码,但它确实解决了最初的问题。感谢大家的其他回复,我将阅读并跟进以改进我的编码。
再次,非常感谢。