Проверьте на равенство на поле MySQL Float

У меня есть система Joomla, и я пытаюсь изменить поиск так, чтобы он правильно нашел значения с плавающей точкой в базе данных.

Так, у меня есть запрос, который создается во времени выполнения, которое выглядит примерно так:

select 'column1'
from 'some_table'
where 'some_float_field' <=> '2.18'

Это не работает, это никогда ничему не соответствует, даже при том, что я вижу записи в дб с этим значением там.

Таким образом, я пытался просто сделать это вместо этого:

select 'column1'
from 'some_table'
where 'some_float_field' <=> 2.18

Никакая удача, таким образом я пытался бросить к десятичному числу (плавание не работает по некоторым причинам), таким образом, я попробовал это:

select 'column1'
from 'some_table'
where 'some_float_field' <=> CAST('2.18' AS DECIMAL(20, 2))

Провал...

Следует иметь в виду, что> = или <= возвращает надлежащие результаты, просто <=> дает мне проблемы.

Как я заставляю равенство работать здесь?

16
задан mskfisher 5 June 2012 в 17:03
поделиться

3 ответа

Обычно с такими вопросами полезно привести небольшой пример для воспроизведения результатов.

Обычно тестирование точных значений с плавающей запятой - плохая идея, так как точность с плавающей запятой не является точной наукой. Гораздо лучше использовать некоторую толерантность.

create table foo1 (col1 float);

insert into foo1 values (2.18);
select * from foo1 where abs(col1-2.18) <= 1e-6
15
ответ дан 30 November 2019 в 21:28
поделиться

Я нашел способ проверить, что мои пользователи считают равенством.

Мне пришлось преобразовать поле в строку символов и протестировать наборы символов, так что для них это нормально работает:

select 'column1'
from 'some_table'
where CAST('some_float_field' AS CHAR) <=> '2.18'
5
ответ дан 30 November 2019 в 21:28
поделиться

Рассмотрим следующее:

where abs(some_float_field) - 2.18 < 0.001
2
ответ дан 30 November 2019 в 21:28
поделиться
Другие вопросы по тегам:

Похожие вопросы: