Php 添加数字并不意味着';我不能给出预期的结果

Php 添加数字并不意味着';我不能给出预期的结果,php,floating-point,Php,Floating Point,我有3个从数据库返回的数字需要加在一起。总共1740.01,我得到大约10.00。这些是浮点数。这是我遇到问题的实际数字 > 1,729.13 > 10.88 > 0.00 如何获得这些数字的正确总数 编辑 $cash = preg_replace('/\$/', '', $cash); $card = preg_replace('/\$/', '', $card); $check = preg_replace('/\$/', '', $check); $cash = nu

我有3个从数据库返回的数字需要加在一起。总共1740.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 );

不要添加已使用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 );
数学课结束后做任何格式化

编辑

$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 );
使用str_replace()而不是preg_replace()去掉任何$,然后它是简单的加法,而不需要执行数组_sum(),尽管我不确定如果数据库中的值是十进制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数组转换为其值之和,清除字符串中的任何$or,请执行以下操作:

$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

数据库中的数据类型是什么?如果你想知道,总数是1740.01。如果你需要更多,看到你正在使用的代码会很高兴,因此我们可以帮助修复它。可能是重复的,1740.01不是我在帖子中看到的吗?@jim,看看你原来的号码怎么了。谢谢Mark,刚才回答了你。变量是pref_替换的数组。你是说我需要把这些数字加在一起,然后使用数字_格式吗?只要确保它们是数字而不是字符串。
1729.13
中的
使PHP将整个数字转换为
1
@Mark,谢谢。这些是我在代码的其他地方使用的值,所以我需要去掉这些值美元符号。谢谢你的编辑和示例。我现在来试一试。马克,你还在吗?我有另一个问题。@Jim-如果是同一个问题,那么在这里编辑你的原始帖子,否则就作为另一个问题提出