2013-05-14 55 views
3

我从XMl得到一些奖励,并想计算总和。为什么不是$M_commission 166.63的输出?使用小数计算的PHP

$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); 

但相同的输出。

Tnx很多!

+0

请出示'$ commission_trans'值。 – mpyw 2013-05-14 05:15:49

+0

@CertaiN 166.00,它已经在那里。 – BlitZ 2013-05-14 05:16:41

+0

你可以添加XML吗? – sectus 2013-05-14 05:17:31

回答

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++; 
} 
+0

感谢您的明确解释,这有效! – Remco 2013-05-14 05:26:45

+0

和一个工作清晰解释downvote?多谢你们。 – 2013-05-14 05:27:37

+0

@Axel Amthor移除了我的。还有其他人。 – BlitZ 2013-05-14 05:28:41

1

我认为标志$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