Это убивает меня! У меня никогда не было так много проблем, и я не могу понять, что я здесь делаю неправильно.
Если у меня есть номер, скажем 2.32, и я хочу сделать математику с ним, это не сработает. Самый простой пример:
$income = $commission; //Commission is 2.32, retrieved from XML echo "income: $income<br>"; $income100 = $income*100; echo "income100: $income100<br>";
В результате я получаю:
income: 2.32 income100: 200
Как правильно использовать десятичное число с математикой без его изменения?
Спасибо!
Вам необходимо присвоить $income
следующим образом, чтобы избавиться от базового SimpleXMLElement
:
$income = (float) $commission;
Пример того, что происходит, когда вы этого не делаете :
$x = simplexml_load_string("<a>2.4</a>"); echo $x * 100; // output: 200
Помимо использования поплавков, как сказал Тим, также не забудьте использовать функции BC Math при выполнении арифметической операции с числами с плавающей запятой. В частности, bcmul () :
$income100 = bcmul($income, 100);
Проблема с числами с плавающей запятой состоит в том, что вы не можете представлять десятичные числа с ними (если только она не может быть записана как a/b
для целых чисел a
и b
, и даже тогда только если abs(a) < pow(2,52)
и b
является степенью 2).
Возможно, вам лучше использовать строковые функции для получения целочисленного значения:
$tmp = explode(".",$commission); $tmp = intval($tmp[0].str_pad(substr($tmp[1],0,2),2,"0"));
Это разделит целочисленную часть из десятичной части, убедитесь, что часть децима состоит из двух цифр и выталкивает ее в конец целой части, тем самым эффективно умножая исходное число на 100.
Я думаю, что самым простым решением было бы превратить его в float с floatval ()
$income = floatval($comission)
оставьте остальную часть кода как есть, и она должна работать по назначению.