2016-10-20 17 views
5

PHP多值我有以下for循環,PHPfor循環

$screen = 1.3; // it can be other decimal value 
    for ($i = 1, $k = 0; $i <= $screen; $i += 0.1, $k+=25) { 
    echo $i . ' - ' . $k . '<br>'; 
} 

它工作正常,但我想運行for循環直到1.3 - 75現在我打印1.2 - 50.我試圖改變$ i < = $ screen到$ i = $ screen但它不起作用。

+0

爲何要使用循環雖然十進制值? – Daan

+0

同意Daan – Jigar7521

+0

我的haver使用十進制值它是我的任務:/ –

回答

5

如果你讀http://php.net/manual/en/language.types.float.php有一個很好的說法,你應該記住:

測試浮點值是否相等是有問題的,因爲它們在內部表示

方式爲了測試相等的浮點值,使用由於舍入而導致的相對誤差的上限。該值被稱爲機器epsilon或單位舍入,並且是計算中可接受的最小差異。

基於推薦有你需要做的是這樣的:

<?php 
$screen = 1.3; // it can be other decimal value 
$epsilon=0.0001; 
for ($i = 1, $k = 0; $i <= $screen+$epsilon; $i += 0.1, $k+=25) { 
    echo $i . ' - ' . $k . "\n"; 
} 
+0

Thx發佈這個答案,即使有一個來自我!和大thx的參考!幾天前有一個幾乎相似的問題,有點複雜,你只是幫助我解決它。 – Twinfriends

2

兩個解決方案:

$screen = 1.4; // it can be other decimal value 
    for ($i = 1, $k = 0; $i <= $screen; $i += 0.1, $k+=25) { 
    echo $i . ' - ' . $k . '<br>'; 
} 

OR:

$screen = 1.3; // it can be other decimal value 
    for ($i = 1, $k = 0; $i <= $screen+0.1; $i += 0.1, $k+=25) { 
    echo $i . ' - ' . $k . '<br>'; 
} 

測試。兩者都工作......據我瞭解你想做什麼。

測試兩者的輸出:

1 - 0 
1.1 - 25 
1.2 - 50 
1.3 - 75 
+0

謝謝工作! :) –

0

你有你的答案,這是偉大的另一種方式來達到同樣如下。 Source

$start = 1; 
$end = 1.3; 
$place = 1; 

$step = 1/pow(10, $place); 

for($i = $start, $k=0; $i <= $end; $i = round($i + $step, $place), $k += 25) 
{ 
    echo $i . ' - ' . $k . '<br>'; 
}