For循环没有运行浮点值

时间:2011-11-07 12:16:43

标签: php for-loop floating-point

我有一个像下面的for循环

<?php 

 for($i=0;$i<=10;$i+0.4){

 echo $i."<br>";
 }

 ?>

此代码打印i的值直到9.6而不是10。

为什么它最后返回i = 10的值。

7 个答案:

答案 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>";
 }

 ?>

结果在此处:http://codepad.org/CxvzEUeq

答案 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>";
}