3

我从 XMl 中获得了一些奖励,并想计算总和。为什么不是$M_commission166.63 的输出?

$i = 0;
$commission_trans = 0;
foreach($responseXml->lead as $lead)
{
    if ($i == 0) {
        $last_trans = $lead->leadTime;
    }
    $commission_trans = $commission_trans + $lead->reward; 
    echo $lead->reward;
    echo "\n";
    $i++;
}

$M_lastclick = $last_trans;
$M_commission = number_format($commission_trans, 2);

echo $M_commission;
echo "\n";
echo $M_lastclick;

输出:100.0 0.63 3.0 30.0 3.0 30.0 166.00 2013-05-10T13:42:01.058+02:00

我试过了

    $commission_trans = number_format($commission_trans + $lead->reward, 2);

但相同的输出。

很多!

4

2 回答 2

1

“XML”表示,这来自一些 XML 流(simple_xml?):

foreach($responseXml->lead as $lead)

因此,对象成员 ( $lead->reward) 是字符串,而不是浮点数。

$commission_trans纯零初始化,因此它是一个整数。

这一行$commission_trans = $commission_trans + $lead->reward; 给出:

(int) = (int) + (string);

我会尝试将 XML 字符串显式转换为浮点数:

$i = 0;
$commission_trans = 0.0;
foreach($responseXml->lead as $lead)
{
    if ($i == 0) {
        $last_trans = $lead->leadTime;
    }
    $commission_trans += floatval($lead->reward); 
                         // or (float)$lead->reward;
    echo $lead->reward;
    echo "\n";
    $i++;
}
于 2013-05-14T05:21:35.483 回答
1

我认为 flag$first$i++.

$first = true;
$commission_trans = 0.0;
foreach($responseXml->lead as $lead) {
    if ($first) {
        $last_trans = (float)$lead->leadTime;
        $first = false;   
    }
    $commission_trans += (float)$lead->reward; 
    echo $lead->reward.PHP_EOL;
}

$M_lastclick = $last_trans;
$M_commission = number_format($commission_trans, 2);

echo $M_commission.PHP_EOL;
echo $M_lastclick;

在 Ideone 上测试:http: //ideone.com/1pi7mQ

于 2013-05-14T05:33:13.197 回答