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から

さらに、0.1 や 0.7 のように、基数 10 の浮動小数点数として正確に表現できる有理数は、仮数のサイズに関係なく、内部で使用される基数 2 の浮動小数点数として正確に表現できません。したがって、精度をわずかに低下させることなく、内部のバイナリ対応物に変換することはできません。

これを克服するには、数字に 10 を掛けます$max。40 や 60 も同様です。

for($i = 10; $i <= $max; $i+=1) {
    echo ($i/10).'<br>';
}
于 2013-06-29T12:08:04.247 に答える
2
$err = .000001//allowable error
for($i = 1; $i <= $max+$err; $i+=0.1) {
    echo "$i<br>";
}
于 2013-06-29T12:11:23.323 に答える
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 に答える
1

整数を使用する場合は精度を設定する必要があります。

このような:

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