У меня есть следующий sql-запрос в mysql:
SELECT * FROM _t_test WHERE pret NOT IN ( 2.6700, 2.6560, 1.8200 )
Я бы ожидал, что строки со значением 1.8200 не будут показаны, но я все еще получаю их.Я что-то пропустил?Поле "прет" двойное (16,4).
Это ошибка округления. Двойное число не является точным значением, поэтому значение 1.8200 не представлено точно, поэтому значения не совсем совпадают.
Плавающие точки MYSQL см. http://dev.mysql.com/doc/refman/5.0/en/problems-with-float.html
Правильный способ сравнения чисел с плавающей запятой - сначала выбрать приемлемый допуск для различий между числами и затем сделайте сравнение со значением допуска. Например, если мы согласны с тем, что числа с плавающей точкой должны рассматриваться как одинаковые, если они одинаковы с точностью до одной десятой тысячи (0,0001), Сравнение должно быть написано, чтобы найти различия больше, чем значение допуска
См. http://en.wikipedia.org/wiki/Double_precision_floating-point_format