Я займу противоположную позицию.
FLOAT
для приблизительных чисел, таких как проценты, средние и т. Д. c. Форматирование следует выполнять при отображении значений либо в коде приложения, либо с помощью функции FORMAT()
MySQL.
Никогда не проверяйте float_value = 1.3
; Есть много причин, почему это не удастся.
DECIMAL
следует использовать для денежных значений. DECIMAL
позволяет избежать второго округления, когда значение необходимо округлить до долларов / центов / евро / и т. Д. c. Бухгалтеры не любят доли центов. Реализация DECIMAL
MySQL допускает 65 значащих цифр; FLOAT
дает около 7, а DOUBLE
около 16. 7 обычно более чем достаточно для датчиков и научных c вычислений.
Что касается "процента" - иногда я использовал TINYINT UNSIGNED
, когда я хотите использовать только 1 байт памяти и не нуждаетесь в большой точности; иногда я использовал FLOAT
(4 байта). Тип данных не настроен специально для процентов. (Также обратите внимание, что DECIMAL(2,0)
не может содержать значение 100
, поэтому технически вам потребуется DECIMAL(3,0)
.)
Или иногда я использовал FLOAT
, который содержал значение от 0 до 1. Но тогда мне нужно было бы убедиться, что нужно умножить на 100, прежде чем отобразить «процент».
Подробнее
Все три «процент, средний, показатель» пахнут как float, так что это будет мой первый выбор.
Один критерий для выбора типа данных ... Сколько копий значения будет существовать?
Если у вас есть таблица из миллиарда строк с в столбце для процента, учтите, что TINYINT
займет 1 байт (всего 1 ГБ), а FLOAT
займет 4 байта (всего 4 ГБ). OTOH, в большинстве приложений не так много строк, поэтому это может не относиться к делу.
Как правило, для "точных" значений следует использовать некоторую форму INT
или DECIMAL
. Неточные вещи (научные c вычисления, квадратные корни, деление и т. Д. c) должны использовать FLOAT
(или DOUBLE
).
Кроме того, форматирование вывода как правило, следует оставить на передний конец приложения. То есть, хотя «среднее» может вычисляться как «14,6666666 ...», на дисплее должно отображаться что-то вроде «14,7»; это дружелюбнее к людям. Между тем, у вас есть базовое значение, чтобы позже решить, что «15» или «14.667» является предпочтительным форматированием вывода.
Диапазон «0.00 - 100.00» можно сделать с помощью FLOAT
и использовать вывод форматирование или DECIMAL(5,2)
(3 байта) с предварительным определением того, что вам всегда будет нужна указанная точность .