我有这样的例子PHP和浮点数
$x = 0.154 + 0.408; $y = 0.562; echo $x - $y;
你可能会认为它是0,但它不是(那也许是因为它取决于你的系统和PHP版本上)。 无论如何,对于那些看不到0的人来说,做浮动操作的正确方法是什么?
我有这样的例子PHP和浮点数
$x = 0.154 + 0.408; $y = 0.562; echo $x - $y;
你可能会认为它是0,但它不是(那也许是因为它取决于你的系统和PHP版本上)。 无论如何,对于那些看不到0的人来说,做浮动操作的正确方法是什么?
$x = bcadd (0.154 ,0.408);
$y = 0.562;
echo bcsub($x,$y);
如果你有额外的库安装...,并且你需要在最后的精度 – danidacar
自PHP 4.0.4以来,libbcmath被捆绑与PHP。这个扩展你不需要任何外部库。 – Oyeme
对不起,这个迟到的警告,但这个例子是明显错误的,它出于错误的原因!如果将0.562更改为0.1,它仍然会返回0,因为'bcsub()'的精度为0小数点。更糟的是,在你的例子中'$ x'将为0。如果你要写'bcsub($ x,$ y,18)',你将会遇到与浮点数相同的问题。你不能用一个库来解决这个问题,你必须理解浮点运算。 – martinstoeckli
它实际上与PHP本身无关,这就是计算机的工作方式 - 有些数字无法精确重新表示,因此您必须记住,当您使用浮动和双精度工作时,可以使用数字近似值。
你可以阅读更多关于浮点在谷歌:floating point arithmetic
你真的应该明白的问题(没有图书馆,可神奇地解决这一问题,PHP是你所需要的)。
你可以在这里找到一篇很好的文章,它的实际写入德尔福,但问题是不特定于任何语言: Comparing floating point values
请仔细阅读在PHP的documenation警告: Floating point precision
你得到的输出是什么? – thwd
您可能想阅读“每位计算机科学家应该了解的浮点运算”。 (http://docs.oracle.com/cd/E19957-01/806-3568/ncg_goldberg.html)以获取完整的血统细节。 –
第100500个这样的问题,没有人关心首先搜索 –