如何从xml文件中提取值并进行数学运算?

时间:2014-06-23 18:44:35

标签: php xml

我想将一个值与xml文件中的另一个值相乘,但它可以工作,但不是我想要的。如果$amount为5,当我乘以$eurotodollar时,我仍然得到5而不是6.882。我在这里找不到什么......

我有php代码:

    <?php
    $xml = simplexml_load_file('curr.xml')or die("Error: Cannot create object");

    $eurtodollar = $xml->OrigCurrency->Cube->Rate[0];

    if(isset($_POST['submit']))
        {
        $amount = $_POST['amount'];
        $cur1 = $_POST['cur1'];
        if(!isset($_POST['cur2']))
        {
            echo "<center><b>Enter Values</b><br></center>";
        }else{
            $cur2 = $_POST['cur2'];
        }
        if($cur1=="EUR" AND $cur2=="USD")
        {
            echo "<center><b>Your Converted Amount is:</b><br></center>";
            echo "<center>" . $amount*$eurtodollar . "</center>";
        }
}
    ?>

xml代码:

<body>
    <OrigCurrency val="Euro">
        <Cube date="2014-06-20">
            <Rate currency="USD">1.3764</Rate>
            <Rate currency="CHF">1.2079</Rate>
            <Rate currency="GBP">0.8731</Rate>
        </Cube>
    </OrigCurrency>
</body>

3 个答案:

答案 0 :(得分:1)

我认为制作变量float会解决你的问题。要使用SimpleXMLElement从变量中获取浮点值,可以使用floatval函数:

floatval($var);

Fpr示例你可以使用

$result = $amount * floatval($eurtodollar)

答案 1 :(得分:1)

你在这里遇到的是:如果你这样做:

 $eurtodollar = $xml->OrigCurrency->Cube->Rate[0];

变量$eurtodollar包含 SimpleXMLElement 类型的对象。

当您现在将该对象与PHP中的数字相乘时,PHP必须进行一些类型转换,因为您无法将对象与数字相乘(您可能知道,您只能将一个数字乘以另一个数字;)) :

 var_dump(1 * $eurtodollar); # int(1)

这样可以让你回到可能意外的整数1。那是因为当你multiply an integer有一个对象时,the object is cast到布尔值TRUE [1] 然后转换为整数{{1} (一)。

所以你在那里写的是

1

但是,如果将对象转换为 float ,则PHP首先尝试将对象转换为字符串(对于具有__toString() method的任何对象,可以使用SimpleXMLElement。然后将字符串转换为 float ,这也是由PHP完成的:

    1 * SimpleXMLElement <Rate currency="USD">1.3764</Rate>
=>  1 * TRUE
=>  1 * 1
==  1

然后是:

var_dump(1 * (float) $eurtodollar); # double(1.3764)

同样,你只能转换为字符串和PHP,然后再将其转换为数字:

    1 * (float) SimpleXMLElement <Rate currency="USD">1.3764</Rate>
=>  1 * (float) "1.3764"
=>  1 * 1.3764
==  1.3764

这是:

var_dump(1 * (string) $eurtodollar); # double(1.3764)

这就是整个魔术。

有关详细信息,请参阅String conversion to numbers


[1] 通常PHP中的所有对象都会转换为布尔 1 * (string) SimpleXMLElement <Rate currency="USD">1.3764</Rate> => 1 * "1.3764" => 1 * 1.3764 == 1.3764 ,但 SimpleXMLElement 在这里是特殊的,因为它可以是布尔TRUE空的时候(例如FALSE)。将它作为第一个元素,你将一直得到0。

答案 2 :(得分:0)

<?php
$xml = simplexml_load_file('curr.xml')or die("Error: Cannot create object");

$eurtodollar = $xml->OrigCurrency->Cube->Rate[0];

if(isset($_POST['submit']))
    {
    $amount = $_POST['amount'];
    $cur1 = $_POST['cur1'];
    if(!isset($_POST['cur2']))
    {
        echo "<center><b>Enter Values</b><br></center>";
    }else{
        $cur2 = $_POST['cur2'];
    }
    if($cur1=="EUR" AND $cur2=="USD")
    {
        echo "<center><b>Your Converted Amount is:</b><br></center>";
        echo "<center>" . ($amount* (float) $eurtodollar) . "</center>";
    }

}     ?&GT;

相关问题