2016-10-08 52 views
1

我真的很想知道,爲什麼下面的代碼總是返回7.我真的很困惑。爲什麼這些表達式總是返回7?

$a = (double) ((0.1 + 0.6) * 10); //Output: 7 
$b = (int) ((0.1 + 0.6) * 10); //Output: 7 
$c = (int) ((0.1 + 0.7) * 10); //Output: 7 

輸出測試:

echo ($a == $b && $a == $c); //Output: true 
+0

看到http://stackoverflow.com/questions/3726721/php-floating-number-precision – jeroen

回答

4
$a = (double) ((0.1 + 0.6) * 10); //Output: 7 
$b = (int) ((0.1 + 0.6) * 10); //Output: 7 
$c = (int) ((0.1 + 0.7) * 10); //Output: 7 

理論上(0.1 + 0.7) * 10部分應該評估至8不7.

在腳本中的第三表達的輸出的計算結果爲7,因爲PHP引擎將內部表達式的值存儲爲7.999999而不是7.

當小數值轉換爲整數時,PHP引擎會簡單地截斷小數部分。

+0

謝謝!我想,我在閱讀過幾次之後就明白了... –