Я прийму протилежну позицію.
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 байти) з попереднім визначенням, що ви завжди хочете вказаної точності .