Вопрос

Я столкнулся с проблемой, введя столбцы с плавающей запятой в схему базы данных MySQL, что сравнения значений с плавающей запятой не всегда возвращают правильные результаты.

1–50,12
2 - 34,57
3 - 12,75
4 - ... (остальные менее 12.00)

родовое слово

Это вернет мне "3".

Я читал, что сравнение значений с плавающей запятой в MySQL - плохая идея, а десятичный тип - лучший вариант.

Есть ли у меня какие-либо надежды продолжить работу с типом float и заставить сравнения работать правильно?

Это было полезно?

Решение

Вы заметили проблему ниже?

родовое слово

Между некоторыми из этих строк есть дополнительный общий кодовый код.Поэтому некоторые из этих значений вернут false по сравнению со значением, которым они были инициализированы.

Чтобы избежать проблем с арифметикой с плавающей запятой и сравнениями, следует использовать тип данных 0.00000005722:

родовое слово

Другие советы

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

Я делаю это

родовое слово

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

с парой десятичных знаков и точным соответствием значений ошибки точности не кажутся очевидной причиной таких несоответствий в MySQL

Это числа с плавающей запятой, так в чем проблема?3 может быть правильным результатом, зависит от того, что думает база данных о 12,75.Это 12,75 или чуть больше?

Используйте DECIMAL, если вам нужны точные числа.

Возникла проблема со сравнением чисел с плавающей запятой на равенство.Это может дать непредсказуемые результаты.Это связано с внутренней реализацией арифметики с плавающей запятой.

Сравнение числа со строкой?

Используйте REAL вместо FLOAT или DECIMAL.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top