PHP for循环显示奇怪的结果

时间:2013-06-29 11:51:38

标签: php for-loop

我有这段代码:

for($i = 1; $i <= $max; $i+=0.1) {
    echo "$i<br>";
}

如果变量$max = 6;结果为:1, 1.1, 1.2, 1.3 .... 5.8, 5.9, 6,但变量$max = 4结果为:1, 1.1 ... 3.8, 3.9,但数字4丢失。

请解释此行为,以及可能的解决方案。

当我使用条件$i <= $max;$i < $max;

时,结果相同

$max2, 3 or 4

时出现错误

4 个答案:

答案 0 :(得分:4)

来自http://php.net/manual/en/language.types.float.php

  

此外,基本10中的浮点数精确表示的有理数,如0.1或0.7,没有精确表示为基数2中的浮点数,无论尾数的大小如何,它都在内部使用。因此,它们不能在没有很小精度损失的情况下转换为它们的内部二进制对应物。

所以要克服这一点,你可以将你的数字乘以10。 所以$max是40或60。

for($i = 10; $i <= $max; $i+=1) {
    echo ($i/10).'<br>';
}

答案 1 :(得分:2)

$err = .000001//allowable error
for($i = 1; $i <= $max+$err; $i+=0.1) {
    echo "$i<br>";
}

答案 2 :(得分:2)

  You can use of number_format()

<?php
$max=6;
for($i = 1; number_format($i,2) < number_format($max,2); $i+=0.1) {
echo $i."<br>";     
}

&GT;

答案 3 :(得分:1)

使用整数时应设置精度

像这样:

$e = 0.0001;
   while($i > 0) {
   echo($i);
   $i--;
}