Find centralized, trusted content and collaborate around the technologies you use most.
Teams
Q&A for work
Connect and share knowledge within a single location that is structured and easy to search.
for($i=0;$i<=2;$i+=0.1){ echo $i."<br>"; }
我希望的结果是:
0 0.1 0.2 0.3 0.4 0.5 0.6 0.7 0.8 0.9 1 1.1 1.2 1.3 1.4 1.5 1.6 1.7 1.8 1.9 2
取而代之的是循环到达1.9并停止。为什么?
1.9
因为,它永远不会实现floating point==integer
floating point
integer
你可以这样做:
for($i=0;$i<=20;$i+=1){ echo ($i/10)."<br>"; }
由于浮点精度,这不起作用。这些数字以 base 2 格式存储,并且由于四舍五入而永远不会精确。当您将 0.1 添加到 1.9 时,您最终不会得到 2.0。你最终得到像 1.99999 这样的东西。在下一次迭代中,您最终会得到类似 2.099998 的内容,具体取决于它以 base 2 格式四舍五入的内容。
有关详细信息,请参阅浮点数和 双精度浮点格式
你也可以做这样的事情来得到你想要的结果
for ($i = 0; $i < 2.1; $i += .1){ echo $i . '<br />'; }