使用小数计算的PHP
问题描述:
我从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很多!
答
的 “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++;
}
答
我认为标志$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
请出示'$ commission_trans'值。 – mpyw 2013-05-14 05:15:49
@CertaiN 166.00,它已经在那里。 – BlitZ 2013-05-14 05:16:41
你可以添加XML吗? – sectus 2013-05-14 05:17:31