SQLinfo.ru - Все о MySQL

Форум пользователей MySQL

Задавайте вопросы, мы ответим

Вы не зашли.

#1 26.05.2017 19:25:24

abutan
Участник
Зарегистрирован: 26.05.2017
Сообщений: 2

SELECT видит не все значения

Здравствуйте.
Третий день сижу и туплю. Проблема такая.
Есть три колонки с типом данных FLOAT - pcd2, dia и diametr. Они имеют, к примеру, следующие значения: pcd2 - 98, 100, 114.3,  dia - 57.01 , 58, 59.5, diametr - 13, 14, 17.5  .
Запрос типа SELECT pcd2 FROM product выводит все значения, также и в остальных колонках. Запрос SELECT * FROM product WHERE pcd2 = 98  срабатывает как положено, то есть когда я выбираю целые числа запрос такого вида работает нормально. Но если я пишу запрос типа SELECT * FROM product WHERE pcd2=114.3 , то есть с дробным значением запрос не находит ничего, хотя такие товары есть. Такая же ситуация и в колонке dia, а в третьей колонке все работает нормально.
Подскажите пожалуйста что это может обозначать и в какую сторону мне вообще копать то.
Заранее благодарен.

Неактивен

 

#2 26.05.2017 19:36:12

deadka
Администратор
Зарегистрирован: 14.11.2007
Сообщений: 2420

Re: SELECT видит не все значения

Дробные значения напрямую (через = ) сравнивать нельзя, из-за двоичной арифметики идут погрешности и округления. Установите тип decimal вместо float.
Ну или сравнивайте не a == b,
а
abs(a-b) < epsilon


Зеленый свет для слабаков, долги отдают только трусы, тру гики работают только в консоли...

Неактивен

 

#3 26.05.2017 20:01:26

abutan
Участник
Зарегистрирован: 26.05.2017
Сообщений: 2

Re: SELECT видит не все значения

Да действительно. Огромное спасибо. С DECIMAL работает. Непонятно только почему в другой колонке работает FLOAT.
Еще раз спасибо.

Неактивен

 

#4 26.05.2017 20:33:51

deadka
Администратор
Зарегистрирован: 14.11.2007
Сообщений: 2420

Re: SELECT видит не все значения

Повезло просто, вот и работает. не делайте так ).


Зеленый свет для слабаков, долги отдают только трусы, тру гики работают только в консоли...

Неактивен

 

#5 29.05.2017 15:11:59

Александр Трофимов
Завсегдатай
Откуда: Юрмала
Зарегистрирован: 19.09.2011
Сообщений: 95

Re: SELECT видит не все значения

Мы все параметры дисков переводим в целые числа умножая на 100. Вами указанные параметры дальше сотых никогда не идут, поэтому умножения на 100 достаточно.
А потом уже делаем выборку целыми числами.
Т.е. вместо = 98 получается 9800, вместо 114,3 - 11430. В результате и фильтры по параметрам работают быстрее и нет головных болей с DECIMAL и FLOAT.

Неактивен

 

Board footer

Работает на PunBB
© Copyright 2002–2008 Rickard Andersson