2011-11-29 136 views
0

我有这样的例子PHP和浮点数

 
$x = 0.154 + 0.408; 
$y = 0.562; 
echo $x - $y; 

你可能会认为它是0,但它不是(那也许是因为它取决于你的系统和PHP版本上)。 无论如何,对于那些看不到0的人来说,做浮动操作的正确方法是什么?

+0

你得到的输出是什么? – thwd

+0

您可能想阅读“每位计算机科学家应该了解的浮点运算”。 (http://docs.oracle.com/cd/E19957-01/806-3568/ncg_goldberg.html)以获取完整的血统细节。 –

+0

第100500个这样的问题,没有人关心首先搜索 –

回答

2
$x = bcadd (0.154 ,0.408); 
$y = 0.562; 
echo bcsub($x,$y); 
+0

如果你有额外的库安装...,并且你需要在最后的精度 – danidacar

+0

自PHP 4.0.4以来,libbcmath被捆绑与PHP。这个扩展你不需要任何外部库。 – Oyeme

+0

对不起,这个迟到的警告,但这个例子是明显错误的,它出于错误的原因!如果将0.562更改为0.1,它仍然会返回0,因为'bcsub()'的精度为0小数点。更糟的是,在你的例子中'$ x'将为0。如果你要写'bcsub($ x,$ y,18)',你将会遇到与浮点数相同的问题。你不能用一个库来解决这个问题,你必须理解浮点运算。 – martinstoeckli

0

它实际上与PHP本身无关,这就是计算机的工作方式 - 有些数字无法精确重新表示,因此您必须记住,当您使用浮动和双精度工作时,可以使用数字近似值

你可以阅读更多关于浮点在谷歌:floating point arithmetic

0

你真的应该明白的问题(没有图书馆,可神奇地解决这一问题,PHP是你所需要的)。

你可以在这里找到

一篇很好的文章,它的实际写入德尔福,但问题是不特定于任何语言: Comparing floating point values

请仔细阅读在PHP的documenation警告: Floating point precision