Я вытягиваю обменный курс с xml Yahoo (евро к долларам)
Я думаю, нужно умножить ставку на динамическое значение. Тем не менее, скорость, которую я тяну, не умножается правильно.
<?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);
Других решений пока нет …