Warning: Cannot use a scalar value as an array in /home/admin/public_html/forum/include/fm.class.php on line 757

Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/include/fm.class.php on line 770

Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/topic.php on line 737
Форумы портала PHP.SU :: ошибки в простых математических вычислениях

 PHP.SU

Программирование на PHP, MySQL и другие веб-технологии
PHP.SU Портал     На главную страницу форума Главная     Помощь Помощь     Поиск Поиск     Поиск Яндекс Поиск Яндекс     Вакансии  Пользователи Пользователи


 Страниц (1): [1]   

> Описание: как избежать
DlTA
Отправлено: 12 Декабря, 2010 - 02:34:57
Post Id



Постоянный участник


Покинул форум
Сообщений всего: 2952
Дата рег-ции: Окт. 2010  


Помог: 53 раз(а)




в общем делаю отнимание, и получаю какую-то ерунду

вот пример дебаг когда:
PHP:
скопировать код в буфер обмена
  1. <?PHP
  2. $price = "10098.12";
  3. $temp = $price;
  4. echo "$temp <br>";
  5. $temp = floor($temp);
  6. echo "$temp <br>";
  7. $temp =  fmod($price,1.0);//$price-$temp;
  8. echo "$temp <br>";
  9. $temp = $temp*100;
  10. echo "$temp <br>";
  11. $temp = ceil($temp);
  12. echo "$temp <br>";
  13. ?>


а вот что выводит этот код:
CODE (htmlphp):
скопировать код в буфер обмена
  1. 10098.12
  2. 10098
  3. 0.120000000001
  4. 12.0000000001
  5. 13

ну вот откуда взялось 0.120000000001 ведь должно быть 0.12 ???
в общем может у меня денвер глючит (на это вся надежда)
но если нет то как это можно избежать?
 
 Top
JustUserR
Отправлено: 12 Декабря, 2010 - 19:25:59
Post Id



Активный участник


Покинул форум
Сообщений всего: 8715
Дата рег-ции: Июнь 2009  


Помог: 17 раз(а)




DlTA пишет:
Ну вот откуда взялось 0.120000000001 ведь должно быть 0.12 ???
Описанный вами результат осуществление операции получения дробного остатка для заданных чисел информационого типа с плавающей точкой одиночной точности - является следствием неустранимой погрешности обеспечиваеомй хранением числового элемента в конечной ячейке памяти - для устраненя данного эффекта необходимо прозводить выбор величины EPS представляющей предельную допустимую точность расчета
Реальноая величина EPS для фиксированного формата представления данных с плавающей точкой может выражаться как число с минимальной мантиссой и порядком - в частности представление EPS-величины float-числа со смещенной характеристикой может быть указано следующим образом 0 00000000 00000000000000000000001 - в данном случае величина порядка является смещенной на величину 127 для обеспечения функционирования алгоримта приведения порядков с исключиельно положительными величинами в прямом коде


-----
Сделать можно все что угодно - нужно только старание, терпение и хороший поисковик Улыбка
Безлимитный web-хостинг от 15 рублей за 40 МБ дискового пространства - http://ihost[dot]oks71[dot]ru/
 
 Top
Страниц (1): [1]
Сейчас эту тему просматривают: 0 (гостей: 0, зарегистрированных: 0)
« Программирование на PHP »


Все гости форума могут просматривать этот раздел.
Только зарегистрированные пользователи могут создавать новые темы в этом разделе.
Только зарегистрированные пользователи могут отвечать на сообщения в этом разделе.
 



Powered by PHP  Powered By MySQL  Powered by Nginx  Valid CSS  RSS

 
Powered by ExBB FM 1.0 RC1. InvisionExBB