我有一个数据库返回的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 );
答案 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