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

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 может кто сталкивался с таким ртаблом?
 

tony2001

TeaM PHPClub
потому, что числа с плавающей точкой имеют ограниченную точность и могут храниться не так, как представляются.
никак не связано с PHP, так работают компьютеры.
 

barsic

Guest
Автор оригинала: tony2001
потому, что числа с плавающей точкой имеют ограниченную точность и могут храниться не так, как представляются.
никак не связано с PHP, так работают компьютеры.
Т.е. что бы скрипт выдавал правильный результат надо использовать округление?
 

Bremen

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


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