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