У чому відмінність float, double і decimal в mysql

Напевно, кожен розробник рано чи пізно стикається з проблемами приведення типів чисел з плаваючою точкою. Суть таких проблем в тому, що числа складаються або порівнюються, результат при цьому виявляється невірним, створюючи враження, що десь помилка в коді. А помилка не в коді, а в обраному типі даних. Тут я розгляну різні типи даних для зберігання дрібних чисел в MySQL.
Використовується для зберігання чисел з плаваючою точкою (дійсних чисел). Число, записане в SQL-запиті, не обов'язково збігається з тим, що зберігається в базі. Тому потрібно бути готовими до проблем з вибіркою, порівнянням, складанням і пошуком таких чисел. Справа в тому, що тип Float зберігає наближене значення. Грубо кажучи, 2.5 + 2.5 не буде рівних точно 5, так як операція всередині сервера буде проходити приблизно як 2.500001 + 2.499999, в загальному, зміст зрозумілий.
Принцип такий же, як і у Float, тільки діапазон збережених чисел ширше: у Float для зберігання виділяється 4 байта, у Double - 8 байт. Тобто, використовуючи Double замість Float, нікуди не дітися від похибки, хоч вона і буде проявлятися набагато рідше (за рахунок більшого діапазону можливих значень)
Decimal і Numeric
Ці типи дозволяють уникнути проблем зі зберіганням і пошуком. Вони зберігають точне значення, наприклад, якщо мова йде про кількість 2.5, воно так і буде зберігатися, шукатися, складатися / відніматися точно і гарантовано. Ці типи даних спеціально створені, щоб зберігати бухгалтерські дані на зразок цін, зарплат, залишків рахунків і т.д. Природно, в таких речах похибки неприпустимі, тому ці типи варто використовувати там, де ви часто робите точні арифметичні або логічні операції.
Зрозуміло, природа описаних речей набагато складніше. Я не ставив собі за мету написати величезний талмуд, а постарався викласти все коротко і простою мовою.