添加数字不会产生预期的结果

时间:2011-01-30 12:19:56

标签: php floating-point

我有一个数据库返回的3个数字,我需要一起添加。总计1,740.01,我得到10.00。这些是浮点数。以下是我遇到问题的实际数字。

> 1,729.13
> 10.88
> 0.00

如何获得这些数字的正确总数?

修改

$cash = preg_replace('/\$/', '', $cash);
$card = preg_replace('/\$/', '', $card);
$check = preg_replace('/\$/', '', $check);

$cash = number_format(array_sum($cash), 2);
$card = number_format(array_sum($card), 2);
$check = number_format(array_sum($check), 2);
$total  = number_format( $cash + $card + $check, 2 );

1 个答案:

答案 0 :(得分:2)

不要添加使用number_format()格式化的值,否则它们可能包含千位分隔符...它们被视为字符串而不是浮点数。

假设$ cash,$ card和$ check是数组:

$cash = array_sum($cash);
$card = array_sum($card);
$check = array_sum($check);

$total  = number_format( $cash + $card + $check, 2 ); 

$cash = number_format( $cash, 2 );
$card = number_format( $card, 2 );
$check = number_format( $check, 2 );

在数学后进行任何格式化

修改

使用str_replace()而不是preg_replace()去除任何$,然后它是简单的添加而不是需要执行array_sum(),虽然我不确定任何$可能来自哪里,如果值是来自数据库的DECIMAL 10,7

$cash = (float) str_replace( array('$',','), '', $cash );
$card = (float) str_replace( array('$',','), '', $card );
$check = (float) str_replace( array('$',','), '', $check );

$total  = number_format( $cash + $card + $check, 2 ); 

$cash = number_format( $cash, 2 );
$card = number_format( $card, 2 );
$check = number_format( $check, 2 );

(假设,在执行str_replace时,$ cash,$ card和$ check的字符串值中是千位分隔符

编辑2

要将$ cash数组转换为其值的总和,已清理任何$或字符串:

$cash = array ( 0 => '$1729.13', 1 => '0.00', 2 => '$1,234.56' );

function cleanArrayValues($value) {
    return (float) str_replace( array('$',','), '', $value );
}

$cash = array_sum(array_map('cleanArrayValues',$cash));

我在$ cash数组中添加了一个额外的值,只是为了演示。

你需要使用cleanArrayValues()回调函数(如果它们都是数组)以相同的方式过滤$ card和$ check