从XML中乘以数字得到舍入

时间:2014-11-27 11:40:06

标签: php xml rounding

我从雅虎的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>

1 个答案:

答案 0 :(得分:3)

你几乎肯定会遇到类型杂耍的异常现象。 PHP看到你试图将字符串相乘并尝试将其转换为可以乘法的类型。在其无限的智慧中,由于某种原因,将字符串转换为整数。

你永远不应该依赖PHP的类型杂耍来做正确的事情,因为在极少数情况下,它不会产生一些非常不可预测的结果。相反,您应该显式地转换输入数据

$EUR2USD = (float) $item->Rate;

$EUR2USD = floatval ($item->Rate);