Php 如何从xml文件中提取值并进行数学运算?
我想将一个值与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
$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