Php误差总和(指数)

时间:2015-03-30 08:42:53

标签: php

我有一系列值,例如

+10.00
-5.00
+0.75
-5.75

他们的总和必须为零,而我在屏幕上读取-3,5527136788005E-15

这是我的代码:

$currSum = 0;


foreach ($transactions as $key=>$value)
{
    $currSum += (float)$value['amountFinal'];
    echo '<p>sum is: '.$currSum.'</p>';
}

我确实试过了(float)演员。

数据来自MySQL。

这是$transactions数组(示例)

Array
(
    [0] => Array
        (
            [idTransactions] => 42809
            [amountFinal] => 1.95
            [idAccount] => 143
            [dateTransaction] => 2014-04-11 16:29:37

        )

    [1] => Array
        (
            [idTransactions] => 43455
            [amountFinal] => 1.50
            [idAccount] => 143
            [dateTransaction] => 2014-04-17 16:06:53

        )
)

编辑:我需要逐步计算总和,因为如果sum为零,我需要:

1 - 将[idTransactions]存储在另一个数组中 2 - 从MySQL中删除idTranscation。

(对于1和2没问题,但是如果$ curSum!= 0我无法实现我的目标)

1 个答案:

答案 0 :(得分:1)

你正在处理PHP或mysql或它们之间的一些奇怪的舍入错误,我猜测。如果您相当确定n位数的精度就足够了,那么您可以简单地做这样的事情(使用n = 5):

$currSum += round($value['amountFinal'], 5);

或者,更好的是(为了表现以及确保它是结果正在被舍入),只需检查最终的显示/比较点:

foreach ($transactions as $key=>$value)
{
    $currSum += (float)$value['amountFinal'];
    echo '<p>sum is: '.round($currSum, 5).'</p>';
}
if (round($currSum, 5) == 0) {
    # do whatever processing you wanted to do...
}