4

我有这个代码:

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

4 回答 4

4

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

此外,可以精确表示为以 10 为底的浮点数的有理数,如 0.1 或 0.7,没有精确表示为以 2 为底的浮点数,无论尾数的大小如何,它都在内部使用。因此,它们不能被转换成它们内部的二进制对应物,而不会有小的精度损失。

所以要克服这个问题,你可以将你的数字乘以 10。40$max或 60 也是如此。

for($i = 10; $i <= $max; $i+=1) {
    echo ($i/10).'<br>';
}
于 2013-06-29T12:08:04.247 回答
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>";     
}

?>

于 2013-06-29T12:31:22.827 回答
2
$err = .000001//allowable error
for($i = 1; $i <= $max+$err; $i+=0.1) {
    echo "$i<br>";
}
于 2013-06-29T12:11:23.323 回答
1

使用整数时应该设置精度,

像这样:

$e = 0.0001;
   while($i > 0) {
   echo($i);
   $i--;
}
于 2013-11-17T23:39:54.853 回答