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

Php 如何从xml文件中提取值并进行数学运算?,php,xml,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-&g

我想将一个值与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>";
        }
}
    ?>
<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>

我认为使变量浮动将解决您的问题。要使用SimpleXMLElement从变量中获取浮点值,可以使用以下函数:

floatval($var);
您可以使用的Fpr示例

$result = $amount * floatval($eurtodollar)
OrigCurrency->Cube->Rate[0];
如果(isset($_POST['submit']))
{
$amount=$_POST['amount'];
$cur1=$_POST['cur1'];
如果(!isset($_POST['cur2']))
{
回显“输入值
”; }否则{ $cur2=$_POST['cur2']; } 如果($cur1==“欧元”和$cur2==“美元”) { echo“您的转换金额为:
”; echo.“($amount*(浮动)$eurtodollar)。”; }
}
?>

您在这里的体验是,如果您:

 $eurtodollar = $xml->OrigCurrency->Cube->Rate[0];
变量
$eurtodollar
包含类型为simplexmlement的对象

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

这就得到了整数1,这可能是意外的。这是因为当你使用一个对象时,它被转换成布尔值,布尔值是
TRUE
[1],然后被转换成整数,整数是
1
(一)

所以你写的是

    1 * SimpleXMLElement <Rate currency="USD">1.3764</Rate>
=>  1 * TRUE
=>  1 * 1
==  1
这就是:

    1 * (float) SimpleXMLElement <Rate currency="USD">1.3764</Rate>
=>  1 * (float) "1.3764"
=>  1 * 1.3764
==  1.3764
这就是:

    1 * (string) SimpleXMLElement <Rate currency="USD">1.3764</Rate>
=>  1 * "1.3764"
=>  1 * 1.3764
==  1.3764
1*(字符串)SimpleXMLElement 1.3764
=>  1 * "1.3764"
=>  1 * 1.3764
==  1.3764
这就是全部的魔力

有关更多信息,请参阅



[1] 通常PHP中的所有对象都将强制转换为布尔值
TRUE
,但是SimpleXMLElement在这里是特殊的,因为它在为空时也可以是布尔值
FALSE
(例如
)。有了它作为第一个元素,您将始终得到0。

完成了任何基本调试,如
echo$eurtodollar
以查看simplexml吐出了什么?是的,但它与echo非常完美,就在计算完成之后problem@MarcB:那会把它转换成字符串,这不能解释为什么它一直是1。我看到它是这样工作的,我只是想谢谢你。如果有其他的方法,你只要把它贴在这里谢谢。我个人也更喜欢像
(float)$var
这样的强制转换,而不是函数调用
floatval($var)
,因为它更能描述代码所做的事情(类型转换)。这就是我所做的。我是新手,我仍然对所有这些提示有很多问题:PHP的特殊之处在于,您可以将每种类型放入同一个变量中。这就是为什么PHP有时会这样做。首先,我认为这是不可能的,但事实上,这个网站拯救了生命。
var_dump(1 * (float) $eurtodollar); # double(1.3764)
    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)
    1 * (string) SimpleXMLElement <Rate currency="USD">1.3764</Rate>
=>  1 * "1.3764"
=>  1 * 1.3764
==  1.3764