我有這樣的代碼:PHP for循環顯示奇怪的結果
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丟失。
請解釋這種行爲,並解決這個問題。
的結果是相同的,當我使用條件時$max
是2, 3 or 4
我有這樣的代碼:PHP for循環顯示奇怪的結果
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丟失。
請解釋這種行爲,並解決這個問題。
的結果是相同的,當我使用條件時$max
是2, 3 or 4
你應該設置精度當使用整數時,
這樣的:
$e = 0.0001;
while($i > 0) {
echo($i);
$i--;
}
從http://php.net/manual/en/language.types.float.php
此外,有理數了用作浮動精確表示
$i <= $max;
或$i < $max;
時發生錯誤基數10中的點數(如0.1或0.7)不具有與基數2中的浮點數一樣的內部使用的精確表示形式,無論尾數的大小。因此,他們不能被轉換成其內部的二進制對應,而不會有小的精度損失。
因此,要克服這一點,你可以用10 所以$max
是40或60乘以你的號碼
for($i = 10; $i <= $max; $i+=1) {
echo ($i/10).'<br>';
}
$err = .000001//allowable error
for($i = 1; $i <= $max+$err; $i+=0.1) {
echo "$i<br>";
}
謝謝,這也解決了這個問題。請提出答案。 –
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>";
}
?>
我覺得這是與舍入的問題:http://docs.oracle.com/cd/E19957-01/806-3568/ncg_goldberg.html 事實上,錯誤不是丟失的4,而是打印6 –
讀取關於浮點精度的紅色塊。 [浮點數](http://php.net/manual/en/language.types.float.php) – bitWorking
如果我修改循環「的($ I = 1; $ I <= $最大值; $ I + = 0.1)'問題仍然相同 –