Форум: Форум PHPФорум ApacheФорум Регулярные ВыраженияФорум MySQLHTML+CSS+JavaScriptФорум FlashРазное
Новые темы: 0000000
Программирование. Ступени успешной карьеры. Авторы: Кузнецов М.В., Симдянов И.В. Самоучитель PHP 5 / 6 (3 издание). Авторы: Кузнецов М.В., Симдянов И.В. Объектно-ориентированное программирование на PHP. Авторы: Кузнецов М.В., Симдянов И.В. PHP 5/6. В подлиннике. Авторы: Кузнецов М.В., Симдянов И.В. PHP Puzzles. Авторы: Кузнецов М.В., Симдянов И.В.
ВСЕ НАШИ КНИГИ
Консультационный центр SoftTime

Форум PHP

Выбрать другой форум

 

Здравствуйте, Посетитель!

вид форума:
Линейный форум Структурный форум

тема: Как узнать является ли число с плавающей точкой double(float) нулем?
 
 автор: sl1p   (07.10.2011 в 05:05)   письмо автору
 
 

к примеру есть число:

$n = (double)0.434343;

нужно узнать, ноль ли это.
При проверке
$n == 0; // = true

Этот способ не подходит т.к. это не ноль а 0.434343.

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

  Ответить  
 
 автор: cheops   (07.10.2011 в 10:15)   письмо автору
 
   для: sl1p   (07.10.2011 в 05:05)
 

Числа с плавающей точкой не храняться в точном виде, они храняться в виде мат.модели. В результате вычислений накапливается ошибка вычислений, поэтому даже если у вас математически получается 0, он может выглядеть как 0.00000002432. Поэтому операторы сравнения == и эквивалентности === применительно к числам с плавающей точкой обычно не применяют. Как правило, для установки того факта, что число с плавающей точкой является нулем, его зажимают в интервале около нуля
<?php
 $var 
0.434343;
 if(
$var >= -0.000001 && $var <= 0.000001) echo "$var == 0.0<br />";
 else echo 
"$var != 0.0<br />";
 
$var 0.0;
 if(
$var >= -0.000001 && $var <= 0.000001) echo "$var == 0.0<br />";
 else echo 
"$var != 0.0<br />";
?>

PS Лучше такое справнение оформить в виде отдельной функции (к сожалению, в PHP операторы перегрузить нельзя).

  Ответить  
Rambler's Top100
вверх

Rambler's Top100 Яндекс.Метрика Яндекс цитирования