Я прийму протилежну позицію.
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)
.)
Або іноді я використовував FLOAT
коефіцієнт, який утримував значення від 0 до 1. Але тоді мені потрібно переконатись у множенні на 100, перш ніж відобразити "відсоток".
Більше
Всі три "відсоткові, середні, швидкісні" пахнуть плаваючими, так що це був би мій перший вибір.
Один критерій прийняття рішення про тип даних ... Скільки копій значення буде існувати?
Якщо у вас є таблиця в мільярд рядків зі стовпцем на відсоток, вважайте, що TINYINT
це займе 1 байт (1 Гб), але FLOAT
займе 4 байти (4 ГБ). Щодо іншого, у більшості застосунків не так багато рядків, тому це може не бути актуальним.
Як "загальне" правило, "точні" значення повинні використовувати певну форму INT
або DECIMAL
. Неточні речі (наукові розрахунки, квадратні корені, поділ тощо) повинні використовувати FLOAT
(або DOUBLE
).
Крім того, форматування виводу зазвичай слід залишити на передньому кінці програми. Тобто, хоча "середній" може обчислюватись "14.6666666 ...", на дисплеї повинно бути щось на зразок "14.7"; це дружніше для людей. Тим часом у вас є основне значення, щоб згодом вирішити, що "15" або "14.667" є кращим вихідним форматуванням.
Діапазон "0,00 - 100,00" можна виконати або FLOAT
використовувати формат виводу або використовувати DECIMAL(5,2)
(3 байти) з попереднім визначенням, що ви завжди хочете вказаної точності .