我从雅虎的xml(欧元到美元)中提取汇率 我认为需要将费率乘以动态值。但是,我所提速度并没有正确倍增。
<?php
$xml=simplexml_load_file("http://query.yahooapis.com/v1/public/yql?q=select%20%2a%20from%20yahoo.finance.xchange%20where%20pair%20in%20%28%22EURUSD%22%29&env=store://datatables.org/alltableswithkeys") or die();
foreach ($xml->results->rate as $item){
$EUR2USD = $item->Rate;
}
echo $EUR2USD*2; // Gives me what looks like a rounded number "2"
echo 1.2475*2; // When I put in the rate by hand (1.2475) multiplication works = "2.495"
?>
为什么这个简单的数学不起作用?
编辑 - 添加XML
<query xmlns:yahoo="http://www.yahooapis.com/v1/base.rng" yahoo:count="1" yahoo:created="2014-11-27T11:45:32Z" yahoo:lang="en-US">
<results>
<rate id="EURUSD">
<Name>EUR to USD</Name>
<Rate>1.2482</Rate>
<Date>11/27/2014</Date>
<Time>6:44am</Time>
<Ask>1.2483</Ask>
<Bid>1.2481</Bid>
</rate>
</results>
</query>
答案 0 :(得分:3)
你几乎肯定会遇到类型杂耍的异常现象。 PHP看到你试图将字符串相乘并尝试将其转换为可以乘法的类型。在其无限的智慧中,由于某种原因,将字符串转换为整数。
你永远不应该依赖PHP的类型杂耍来做正确的事情,因为在极少数情况下,它不会产生一些非常不可预测的结果。相反,您应该显式地转换输入数据
$EUR2USD = (float) $item->Rate;
或
$EUR2USD = floatval ($item->Rate);