在使用現金轉換進行測試時,我遇到了這個問題。如果我將510設置爲intval(),它仍然表示float * 100小於字符串或int。爲什麼PHP這樣做?在php中爲什麼是浮點數>字符串或浮點數> int
$var = 4.73 + .37;
$amt = 510;
if($var * 100 > 510){
echo 'wtf';
}
在使用現金轉換進行測試時,我遇到了這個問題。如果我將510設置爲intval(),它仍然表示float * 100小於字符串或int。爲什麼PHP這樣做?在php中爲什麼是浮點數>字符串或浮點數> int
$var = 4.73 + .37;
$amt = 510;
if($var * 100 > 510){
echo 'wtf';
}
這都是關於浮點運算。在所有其他編程語言中出現同樣的問題
最簡單的例子: 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
不要使用浮點數來存儲金額,尤其是做任何計算他們 - 使用美分或定點運算(如適用)
歡迎使用浮點運算。 – Sirko
place var_dump($ var,$ amt);在if語句之前。你會在那裏找到你的答案。 – jeff
http://floating-point-gui.de/閱讀。並且不要再爲了金錢而使用浮點數。使用int和計數分。 –