我想将一个值与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>
答案 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;