我有一个像下面的for循环
<?php
for($i=0;$i<=10;$i+0.4){
echo $i."<br>";
}
?>
此代码打印i的值直到9.6而不是10。
为什么它最后返回i = 10的值。
答案 0 :(得分:3)
使用+=
递增它,而不仅仅是加号。就像现在一样,它对我来说是一个无限循环。
编辑:由于某些原因,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正在做的事情导致了这个
答案 1 :(得分:3)
因为代表机器的浮点数 - http://en.wikipedia.org/wiki/Floating_point
我建议对循环使用整数索引
答案 2 :(得分:2)
准确的FLOAT比较存在问题(发生在&lt; = )。
这样做:
for($i=0; $i<=100; $i+=4){
echo ($i/10)."<br>";
}
答案 3 :(得分:1)
你可以这样做:
<?php
for($i=0;$i<=100;$i += 4){
echo ($i/10)."<br>";
}
?>
答案 4 :(得分:1)
为了进行精确比较,您可以对这些值进行舍入,如下所示......
<?php
for($i=0; round($i,1) <= 10; $i += 0.4){
echo $i."<br/>";
}
?>
答案 5 :(得分:1)
<?php
for($i=0;$i<10;$i+0.4){
echo $i."<br>";
}
?>
如果你把i&lt; = 10然后它会继续打印到值10但是如果删除=符号那么它将在9停止!
答案 6 :(得分:0)
比较时,必须使用epsilon值,表示比较浮点值时允许的错误。
$epsilon=0.000001; //a very small number
for($i=0; $i<10 or abs($i-10)<$epsilon; $i+=0.4){
echo $i."<br>";
}