将 XML 中的数字相乘将四舍五入


Multiplying number from XML gets rounded

我正在从雅虎的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);