可能的重复:
为什么十进制数不能用二进制精确表示? https://stackoverflow.com/questions/1089018/why-cant-decimal-numbers-be-represented-exactly-in-binary
浮动值的问题 https://stackoverflow.com/questions/6503994/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,使用 > 代替 == 即可。很粗糙,不是世界上最好的代码,但它确实解决了最初的问题。感谢大家的其他回复,我将阅读并跟进这些回复以改进我的编码。
再次非常感谢。
这给出了期望的结果:
$var1 = 1;
for ( $i=0; $i<30; $i++ ) {
$var1 += 0.1;
$var2 = (int)($var1);
$var3 = $var1-$var2;
if ( $var3 >= 0.45 ) {
$var1 = $var2+1;
}
echo $var1.' '.$var2.' '.$var3.'<br/>';
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)