【发布时间】:2012-07-07 04:01:10
【问题描述】:
可能重复:
Why can't decimal numbers be represented exactly in binary?
problem with floating values
$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 和 > 代替 == 就可以了。粗糙而不是世界上最好的代码,但它确实解决了最初的问题。感谢大家的其他回复,我将阅读并跟进以改进我的编码。
再一次,非常感谢。
【问题讨论】:
-
也许发布“疯狂的科学答案”是什么???
-
浮点问题的精彩解释:stackoverflow.com/questions/1089018/…