可能重复:
为什么十进制数字不能在二进制中精确表示?
浮点数值问题
这个循环的意图是计数1.0, 1.1, 1.2, 1.3, 1.4,然后跳到2.0, 2.1, 2.2等等。
我遇到的问题是
我该怎么办?请帮帮我!
编辑:我匆忙写下了这个问题,它不止一个问题,现在我看到了。
问题的第一部分实际上是“如何通过绕过这个浮点数问题使其工作”和“为什么会出现这个问题!”
非常感谢所有伟大的回答,我将投票支持那个轻松回答“如何使其工作”的核心问题的答案。
使用0.49代替0.5并使用>代替==就可以解决问题。虽然代码粗糙,但确实解决了原始问题。谢谢大家的其他回复,我会阅读并跟进以改善我的编码。
再次感谢。
为什么十进制数字不能在二进制中精确表示?
浮点数值问题
$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并使用>代替==就可以解决问题。虽然代码粗糙,但确实解决了原始问题。谢谢大家的其他回复,我会阅读并跟进以改善我的编码。
再次感谢。