我正在从雅虎的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>
您几乎可以肯定遇到了类型杂耍异常。 PHP 看到您正在尝试将字符串相乘,并尝试将其转换为可以相乘的类型。 在其无限的智慧中,出于某种原因,它将字符串转换为整数。
你永远不应该依赖PHP的类型杂耍来做正确的事情,因为在极少数情况下,当它不这样做时,它会产生一些非常不可预测的结果。 相反,您应该显式强制转换输入数据
$EUR2USD = (float) $item->Rate;
或
$EUR2USD = floatval ($item->Rate);