2014-04-10 86 views
1

我是一個奇怪的問題,我希望你能幫助我。比較兩個浮點值 - 不完全相同

從來就開頭兩個值:

var_dump($order_sum); 
var_dump($orders_obj->getOrders_preisliste_sum()); 
var_dump($order_sum != $orders_obj->getOrders_preisliste_sum()); 

結果:

float(49.7) 
string(7) "49.7000" 
bool(true) 

這一切是好的,但爲什麼是這樣還「真」如果我對它們進行比較?

var_dump($order_sum); 
var_dump(floatval($orders_obj->getOrders_preisliste_sum())); 
var_dump($order_sum != floatval($orders_obj->getOrders_preisliste_sum())); 

結果:

float(49.7) 
float(49.7) 
bool(true) <--- 

在我看來,這應該是相同的,但在這裏,PHP將其顯示爲不同的。

+0

[閱讀這些內容,直到你得到他們所說的要點](http://docs.oracle.com/cd/E19957-01/806-3568/ncg_goldberg.html)。浮點精度比首次出現時更爲複雜。 [這個答案](http://stackoverflow.com/questions/10334688/how-dangerous-is-it-to-compare-floatingpoint-values)也可能提供一些見解。 – Adam

+0

@亞當:他們都應該是'49.700000000000003' – AbraCadaver

+0

我沒有想到任何事情。感謝幫助。我四捨五入的價值,現在一切都是正確的。 –

回答

2

您可以使用bccomp函數(bcmath擴展)來比較您的浮點值:http://www.php.net/manual/en/function.bccomp.php。 由於Adam剛剛提到的浮點精度,您的值實際上不等於。

+0

謝謝,我還沒有使用過的新功能。 :-) –