MySQL « Тип данных для цены товара…

Какой из типов данных (float, decimal или double) использовать в mysql для хранения цены товара...с двумя знаками после запятой и для дальнейших математических операций над ней, чтобы результат вычислений (стоимость например с учетом скидок) был верным?

1 ответов


Однозначно decimal. Потому как ни один формат с плавающей точкой ( float и иже с ними ) не поддерживает гарантированной заданной точности. У них назначение другое.
Ну или для Беларуси int Потому как мы тут все миллионами меряем. :)
У меня в одном из живых проектов так и есть. Базовая цена ( в употребляемой всеми в расчетах и разговорах валюте ) decimal 10.2. Пототому как она в 90% случаях доллар и в 10% евро. А выходная цена в int. Потому что в долларах у нас расчеты запрещены, и все нужно пересчитывать на местный рубль, который на сегодняшний день является самой мелкой валютой мире, если я не ошибаюсь :) С расчетами и округлениями нет никаких проблем.


В документации рекомендуют для монетарных значений использовать decimal. Зачем изобретать велосипед и экономить на битах с double/float ?


Операции происходят не в полях базы. В базе вы всего лишь сохраняете результаты вычислений. Так что, думаю, Float (x,2) будет более чем достаточно. Что касается точностей вычислений, то, думаю это относится больше к интерфейсной части.