Выбор поплавка в MySQL

Я пытаюсь выполнить соответствие SELECT в таблице на основе идентификатора и цены, например:

 SELECT * FROM `table` WHERE `ident`='ident23' AND `price`='101.31'; 

Приведенное выше возвращает нулевые строки, а если вы удалите бит price='101.31' он вернет правильную строку.

Выполнение …

 SELECT * FROM `table`; 

Возвращает ту же строку, что и выше, и совершенно ясно указывает, что price='101.31' . Однако выбор не подходит. Изменение = на <= заставляет его работать, но это не совсем решение.

Есть ли способ отбросить MySQL-float до 2-х цифр до того, как операция будет выполнена на нем, тем самым сделав вышеуказанную работу SELECT (или какое-то другое решение)?

Благодаря!

Кастинг для десятичной дроби для меня работал:

 SELECT * FROM table WHERE CAST(price AS DECIMAL) = CAST(101.31 AS DECIMAL); 

Тем не менее, вы можете подумать о том, чтобы просто сделать столбец price DECIMAL в первую очередь. DECIMAL обычно считается лучшим типом для использования при работе с денежными величинами.

Это не работает, потому что поплавок по своей сути является неточным. Фактическое значение, вероятно, похоже на «101.3100000000001». Сначала вы можете использовать ROUND () для округления до 2-х мест или лучше использовать тип DECIMAL вместо float.

Никогда не используйте поплавки за деньги.

Сегодня я также столкнулся с той же ситуацией и решаюсь с помощью функции FORMAT MySQL, она вернет результаты, которые точно соответствуют вашему предложению WHERE.

SELECT * FROM yourtable WHERE FORMAT (col, 2) = FORMAT (значение, 2)

Объяснение: FORMAT ('col name', точность числа с плавающей запятой)

Надеюсь, поможет.

Возможно, что-то вроде этого:

 SELECT * FROM table WHERE ident='ident23' AND ABS(price - 101.31) < .01; 

Это работает?

 SELECT * , ROUND( price, 2 ) rounded FROM table WHERE ident = 'ident23' HAVING rounded = 101.31