SharePoint Alfresco PHP MySQL
О сайте Контакты
воскресенье, 26 января 2014 г.

В чем отличие Float, Double и Decimal в MySQL?

Наверное, каждый разработчик рано или поздно сталкивается с проблемами приведения типов чисел с плавающей точкой. Суть таких проблем в том, что числа складываются или сравниваются, результат при этом оказывается неверным, создавая впечатление, что где-то ошибка в коде. А ошибка не в коде, а в выбранном типе данных. Здесь я рассмотрю различные типы данных для хранения дробных чисел в MySQL.

Float

Используется для хранения чисел с плавающей точкой (вещественных чисел). Число, записанное в SQL-запросе, не обязательно совпадает с тем, что хранится в базе. Поэтому нужно быть готовыми к проблемам с выборкой, сравнением, сложением и поиском таких чисел. Дело в том, что тип Float хранит приближенное значение. Грубо говоря, 2.5 + 2.5 не будет равно точно 5, так как операция внутри сервера будет проходить примерно как 2.500001 + 2.499999, в общем, смысл понятен.

Double

Принцип такой же, как и у Float, только диапазон хранимых чисел шире: у Float для хранения выделяется 4 байта, у Double - 8 байт. То есть, используя Double вместо Float, никуда не деться от погрешности, хоть она и будет проявляться гораздо реже (за счет большего диапазона возможных значений)

Decimal и Numeric

Эти типы позволяют избежать проблем с хранением и поиском. Они хранят точное значение, например, если речь идет о числе 2.5, оно так и будет храниться, искаться, складываться/вычитаться точно и гарантированно. Эти типы данных специально созданы, чтобы хранить бухгалтерские данные наподобие цен, зарплат, остатков счетов и т.д. Естественно, в таких вещах погрешности недопустимы, поэтому эти типы стоит использовать там, где вы часто делаете точные арифметические или логические операции.

Разумеется, природа описанных вещей гораздо сложнее. Я не ставил своей целью написать огромный талмуд, а постарался изложить все кратко и простым языком.

Sergey Lysenko, воскресенье, 26 января 2014 г.

Комментарии: