2014-02-17 113 views
0

在使用現金轉換進行測試時,我遇到了這個問題。如果我將510設置爲intval(),它仍然表示float * 100小於字符串或int。爲什麼PHP這樣做?在php中爲什麼是浮點數>字符串或浮點數> int

$var = 4.73 + .37; 
$amt = 510; 
if($var * 100 > 510){ 
    echo 'wtf'; 
} 
+4

歡迎使用浮點運算。 – Sirko

+0

place var_dump($ var,$ amt);在if語句之前。你會在那裏找到你的答案。 – jeff

+3

http://floating-point-gui.de/閱讀。並且不要再爲了金錢而使用浮點數。使用int和計數分。 –

回答

5

這都是關於浮點運算。在所有其他編程語言中出現同樣的問題

最簡單的例子: 0.1 + 0.2 = 0.30000000000000004

你不會看到它,如果你使用echo甚至var_dump,因爲它會被截斷在人類展示友好的形式,但可以清楚地看到它在這裏:

$a = 0.3; // true 0.3 
$b = 0.1 + 0.2; // approximately 0.3 

var_dump($a); // 0.3 
var_dump($b); // 0.3 

var_dump($a == $b); // false 

var_dump($a == 0.3); // true 
var_dump($b == 0.3); // false 

var_dump($a == 0.30000000000000004); // false 
var_dump($b == 0.30000000000000004); // true 

不要使用浮點數來存儲金額,尤其是做任何計算他們 - 使用美分或定點運算(如適用)

+0

+1不要使用花車來存儲金額 – user1844933

+0

@Adassko我們應該用什麼來存儲金額 –

+0

如果他使它大膽閃爍,我會+1它);-))。 –