如何防止foreach语句删除我的小数?

时间:2014-01-28 05:14:47

标签: php foreach decimal

我正在做的一个项目让我在我的智慧结束。我是用PHP编写的新手,我相信在我的问题中我会相当明显。我有一个XML文件,其中包含多个项目元素,我在表格中列出。在表格的最后,我有另一行显示总重量。如果所有权重都是整数,则可以正常工作。我遇到的问题是,如果我的项目权重中有任何小数,它们似乎在计算过程中消失了。以下是我正在运行的foreach语句的示例。

foreach ($xml->items->item as $item) {
$ItemWeight = (($item->weight) * ($item->quantity)) + $ItemWeight;
}

摘自XML文档。

<items>
    <item>
        <name>Sleeping Bag</name>
        <weight>5</weight>
        <quantity>1</quantity>
    </item>
    <item>
        <name>Clothes</name>
        <weight>2.5</weight>
        <quantity>5</quantity>
    </item>
    <item>
        <name>Socks</name>
        <weight>.5</weight>
        <quantity>10</quantity>
    </item>
    <item>
        <name>MRE</name>
        <weight>1</weight>
        <quantity>5</quantity>
    </item>
</item>

在我的示例Clothes中,计算的总权重为10而不是12.5,Socks将完全消失。 $ItemWeight输出为20而不是27.5。

2 个答案:

答案 0 :(得分:0)

您应该尝试通过检查单个节点的值来调试代码。您可以尝试以下获得正确值27.5的代码。

这里我已经将xml转换为一个不需要的数组。这只是一个快速而肮脏的解决方案。你可以看到foreach没有问题。我相信你传递的价值观是错误的。

  $xmlstring = '
<items>
    <item>
        <name>Sleeping Bag</name>
        <weight>5</weight>
        <quantity>1</quantity>
    </item>
    <item>
        <name>Clothes</name>
        <weight>2.5</weight>
        <quantity>5</quantity>
    </item>
    <item>
        <name>Socks</name>
        <weight>.5</weight>
        <quantity>10</quantity>
    </item>
    <item>
        <name>MRE</name>
        <weight>1</weight>
        <quantity>5</quantity>
    </item>
</items>';


$xml = simplexml_load_string($xmlstring);
$json = json_encode($xml);
$items = json_decode($json,FALSE);
$ItemWeight=0;
foreach ($items->item as $item) {
$ItemWeight = (($item->weight) * ($item->quantity)) + $ItemWeight;
echo $ItemWeight."\n";
}

答案 1 :(得分:0)

尝试使用floatval()

所以你的foreach循环看起来像这样:

   foreach ($xml->item as $item) {
   $weight = floatval(($item->weight));
   $quantity = floatval(($item->quantity));
   $ItemWeight = ($weight * $quantity);
   echo $ItemWeight."\n";