PHP浮点减法错误

PHP浮点减法错误,php,math,floating-point-precision,Php,Math,Floating Point Precision,我收到一个错误,条件是我需要一个减法结果小于或等于零。具体值如下(通过var_dump获得): 我希望($arr\u charges[total]-$arr\u credits[total])=float(0),因为这两个值是相同的数字。我知道这个问题可能会发生在不同的数字上,这是因为浮点数的精度问题,但我认为当相同的数字用作分钟数和减数时,这是很奇怪的 我正在使用PHP: > php --version PHP 5.4.6-1ubuntu1.8 (cli) (built: Apr 4

我收到一个错误,条件是我需要一个减法结果小于或等于零。具体值如下(通过var_dump获得):

我希望
($arr\u charges[total]-$arr\u credits[total])=float(0)
,因为这两个值是相同的数字。我知道这个问题可能会发生在不同的数字上,这是因为浮点数的精度问题,但我认为当相同的数字用作分钟数和减数时,这是很奇怪的

我正在使用PHP:

> php --version
PHP 5.4.6-1ubuntu1.8 (cli) (built: Apr  4 2014 01:28:36)
Copyright (c) 1997-2012 The PHP Group
Zend Engine v2.4.0, Copyright (c) 1998-2012 Zend Technologies
    with XCache v2.0.0, Copyright (c) 2005-2012, by mOo
这正常吗?或者这是一个PHP错误

似乎有一种方法可以修复结果,那就是对
int
应用强制转换。在我的情况下,它是有效的,但在某些情况下,这可能是不够的

更新日期2014年1月5日-1

谢谢你善意的回答。下面是一段与此相关的代码:

$arr_charges['total'] = 25.63;
$arr_credits['total'] = 25.63;

return (($arr_charges['total'] - $arr_credits['total']) <= 0 );
$arr_费用['total']=25.63;
$arr_学分['total']=25.63;

return($arr_charges['total']-$arr_credits['total'])您可以通过近似值来测试相等性,它应该避免浮点错误

function isEqual($a, $b)
{
    return abs($a-$b) <= 0.00001;
}
函数相等($a,$b)
{

返回abs($a-$b),如果您理解其原因(精度)-那为什么要问?是的,这是因为浮点数精度问题。不-你不应该在相等点上比较浮点数。@AlmaDo:我认为这不相关。在这个问题中,比较在哪里进行?你没有显示任何有效的代码。@AmalMurali它是相关的。一旦数据不精确,它就会影响所有相关的内容。例如,相等性检查(OP的问题中有一个比较)在某些情况下可能有效,但这不是比较浮点值的好方法。如果这些值需要比0.00001更精确怎么办,
function isEqual($a, $b)
{
    return abs($a-$b) <= 0.00001;
}