Intereting Posts
Лучший способ записи выражения в конструкцию if Компиляция расширения PHP как не потокобезопасное проверить дублируемую запись и использовать результат PDO errorInfo заменяя пробелы только одним «_», Где я должен помещать важные файлы так, чтобы они читались с помощью PHP-скриптов? Синхронизация базы данных Online / Offline – MySQL / PHP отправка данных на шлюз оплаты и обратно – возможные проблемы Apache: измените дескриптор XAMPP / PHP из приложения / x-httpd-php в application / x-httpd-php5 как передать все параметры запроса запроса на встроенные контроллеры в twig symfony 2? Как написать подробную информацию в файл? Laravel 4 Auth – используйте md5 вместо интегрированного Hash :: make () WooCommerce Бесплатная доставка – удалите исходное или измените текстовое имя при оформлении заказа и электронной почте Как изменить действие woocommerce_before_cart включить внешние php-файлы Ограничить unserialize () для возврата массивов?

Простая математика с десятичными знаками в PHP

Это убивает меня! У меня никогда не было так много проблем, и я не могу понять, что я здесь делаю неправильно.

Если у меня есть номер, скажем 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 

Как правильно использовать десятичное число с математикой без его изменения?

Спасибо!

Related of "Простая математика с десятичными знаками в PHP"

Вам необходимо присвоить $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)

оставьте остальную часть кода как есть, и она должна работать по назначению.