2014-04-10 55 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

谢谢,我还没有使用过的新功能。 :-) –