SQL MIN () странное значение - PullRequest
8 голосов
/ 12 декабря 2011

Я работаю в небольшом интернет-магазине и пытаюсь получить самую низкую цену за продукт (фотографии).

Поэтому я проверяю, какая самая низкая добавленная цена (фотографии можно заказать в разных размерах):

SELECT 
  MIN(price) as price 
FROM 
  rm_prices 
WHERE 
  photo_id = '47' AND 
  price != '0'

Возвращает самое низкое значение, найденное для этого продукта.

Когда я проверяю свою базу данных, я вижу, что самое низкое значение - 1256,3.
Когда я печатаю свой результат, число, которое дают, составляет 1256.30004882813.
Значение устанавливается как FLOAT.

Почему результат 1256.30004882813, а не 1256.3?

Ответы [ 3 ]

13 голосов
/ 12 декабря 2011

Поскольку действительное число 1256.3 не может быть точно представлено в с плавающей точкой .

Вы должны использовать тип данных с фиксированной точкой для денежных данных. Цитирование из документации MySQL :

Типы DECIMAL и NUMERIC хранят точные числовые значения данных. Эти типы используются, когда важно сохранить точную точность, например с денежными данными.

6 голосов
/ 12 декабря 2011

Это побочный эффект типа столбца FLOAT, вы можете попытаться сохранить ваши цены в типе данных DECIMAL, для получения дополнительной информации см. Руководство mysql: http://dev.mysql.com/doc/refman/5.1/en/fixed-point-types.html

1 голос
/ 12 декабря 2011

1256.3 не имеет точного представления в арифметике с плавающей точкой; по этой причине обычно лучше хранить денежные суммы в виде INTEGER или DECIMAL типов данных.

Более подробную информацию можно найти здесь .

...