For 循环未针对浮点值运行
Posted
技术标签:
【中文标题】For 循环未针对浮点值运行【英文标题】:For loop is not running for float values 【发布时间】:2011-12-23 14:18:05 【问题描述】:我有一个像下面这样的 for 循环
<?php
for($i=0;$i<=10;$i+0.4)
echo $i."<br>";
?>
此代码将 i 的值打印到 9.6 而不是 10。
为什么最后返回 i=10 的值。
【问题讨论】:
你弄错了,$i+0.4
可能是$i+=0.4
,因为你说它一直到 9.6,导致下面的 3 个答案无效。
【参考方案1】:
因为代表机器的浮点数 - http://en.wikipedia.org/wiki/Floating_point
我建议对循环使用整数索引
【讨论】:
+1。但并不总是可以使用整数索引。在这些情况下,您必须使用 epsilon 值 - 例如允许的错误。看我的回答。【参考方案2】:使用+=
来增加它,而不仅仅是加号。就像现在一样,它对我来说是一个无限循环。
编辑:由于某种原因,PHP 无法在循环中的不同类型下正常工作。
下面的应该可以工作
for($i=0;$i<=100;$i+=4)
echo $i/10."<br>";
这是var_dump
int(0)
float(0.4)
float(0.8)
float(1.2)
float(1.6)
int(2)
float(2.4)
float(2.8)
float(3.2)
float(3.6)
int(4)
float(4.4)
float(4.8)
float(5.2)
float(5.6)
int(6)
float(6.4)
float(6.8)
float(7.2)
float(7.6)
int(8)
float(8.4)
float(8.8)
float(9.2)
float(9.6)
int(10)
这可能是 PHP 正在执行的自动转换导致的
【讨论】:
为什么不打印 10. 我只是问这个。请【参考方案3】:准确的 FLOAT 比较存在问题(发生在 = 中)。
这样做:
for($i=0; $i<=100; $i+=4)
echo ($i/10)."<br>";
【讨论】:
【参考方案4】:为了精确比较,您可以对这些值进行四舍五入,如下所示...
<?php
for($i=0; round($i,1) <= 10; $i += 0.4)
echo $i."<br/>";
?>
【讨论】:
【参考方案5】:你可以这样做:
<?php
for($i=0;$i<=100;$i += 4)
echo ($i/10)."<br>";
?>
结果在这里:http://codepad.org/CxvzEUeq
【讨论】:
但实际上我有两个值,一个是 $start,第二个是 $end。这些值可以是 float 或 int 之类的任何值。所以我的 for 循环就像 for($i=$start;$ 当您按照另一个答案中的建议进行比较时,这会出现问题 @user1031816:我已经发布了另一个答案,它显示了事情应该如何完成。使用 epsilon 值。【参考方案6】:<?php
for($i=0;$i<10;$i+0.4)
echo $i."<br>";
?>
如果你输入 i
【讨论】:
【参考方案7】:比较时必须使用epsilon值,表示比较float值时允许的错误。
$epsilon=0.000001; //a very small number
for($i=0; $i<10 or abs($i-10)<$epsilon; $i+=0.4)
echo $i."<br>";
【讨论】:
以上是关于For 循环未针对浮点值运行的主要内容,如果未能解决你的问题,请参考以下文章