Проблема с типами

  • Автор темы Автор темы barsic
  • Дата начала Дата начала

barsic

Guest
Проблема с типами

Hi, All.

Столкнулся я с такой проблемой в PHP на сервере с FreeBSD, на локалке работает все отлично.
Мне надо провести манипуляции с двумя числами с плавающей точкой. Эти данные приходят с метода POST, потом возводятся в степень и производится вычитание. Вот пример кода.

PHP:
  $data = array();
  $data['open_'] = '1.2545';
  $_POST['sc_close'] = '1.2610';
  $d = 4;
  $data['open_'] = (double)$data['open_'];
  $_POST['sc_close'] = (double)$_POST['sc_close'];
  (int)$open = $data['open_']*pow(10, $d);
  (int)$close2 = pow(10, $d);
  (int)$close = $_POST['sc_close']*$close2;
  $profit = $open - $close;
echo $profit;

В результате имею на выходе: -64.999999999998
Почему не -65 может кто сталкивался с таким ртаблом?
 
потому, что числа с плавающей точкой имеют ограниченную точность и могут храниться не так, как представляются.
никак не связано с PHP, так работают компьютеры.
 
Автор оригинала: tony2001
потому, что числа с плавающей точкой имеют ограниченную точность и могут храниться не так, как представляются.
никак не связано с PHP, так работают компьютеры.
Т.е. что бы скрипт выдавал правильный результат надо использовать округление?
 
Если вы специфицируете число за рамками диапазона типа integer, оно будет интерпретировано как float. Также, если вы выполняете операцию, которая даёт в результате число за пределами диапазона типа integer, будет возвращено float.
Никогда не приводите неизвестную дробь к integer, так как это может дать непредсказуемый результат. echo (int) ( (0.1+0.7) * 10 ); // выведет 7!


Chitay www.php.net
 
Сверху