Странный результат работы SELECT

X-Ception

Новичок
Странный результат работы SELECT

Имеется простая таблица:
PHP:
CREATE TABLE `table1` (
  `id` int(11) unsigned NOT NULL auto_increment,
  `ff` float(9,2) unsigned NOT NULL default '0.00',
  PRIMARY KEY  (`id`),
  UNIQUE KEY `id` (`id`)
) TYPE=MyISAM;
Ее содержимое:
PHP:
INSERT INTO `table1` (`id`, `ff`) VALUES 
  (1,1),
  (2,2),
  (3,2),
  (4,9.9),
  (5,25.2),
  (6,25.2),
  (7,9.9),
  (8,15.5);
Запрос:
PHP:
SELECT * FROM table1 WHERE ff=15.5;
все верно отрабатывает и возвращает 8 запись.
Меняем значение на 9.9 - результат - пустое множество. Числа 9.9 и 25.2 не нравятся mysql, а с остальными все в порядке :)
mysql 4.1.22
Вроде не первый день работаю с ним, но с такой штукой встретился впервые, в чем может быть причина?
 

Sergey_Al

Новичок
У меня тоже самое, MySQL 4.1.21, винда

-~{}~ 03.05.07 23:48:

Нашёл в чём дело, эта проблема описана в мане: "A.5.7. Проблемы со сравнением чисел с плавающей точкой". Если кратко, то сделайте такой запрос

SELECT ff * 1.0000000000000000 FROM `table1`

и Вы поймёте, что дело в том, что числа храняться с определённой точностью. Решений слудующее - сравнивать с некоторой точностью, например 0.00001
 

X-Ception

Новичок
Да, спасибо, тоже уже сам разобрался, оказалось, что float и double на самом деле хранятся с полной точностью, которую позволяет аппаратная платформа, а округляются только при выводе, соответственно и такое сравнение не всегда срабатывает.
Для решения собственной задачи перешел с float на decimal.
 
Сверху