💻
Как нам хранить числа с плавающей запятой в базе данных?
Для этого существует несколько типов данных:
MySQL: float, double, decimal
PostgreSQL: real, double, numeric
decimal и
numeric — это одно и то же, как и
float и
real.
float (real)Использует 4 байта памяти.
Хранится в двоичном (бинарном) формате, поэтому могут возникать небольшие неточности при выполнении арифметических операций или округлении.
doubleИспользует 8 байт памяти.
Хранится в двоичном формате, позволяет хранить большие числа по сравнению с float, а также обладает более высокой точностью. Однако все равно могут быть неточности.
decimal (numeric)Использует переменное количество памяти. Например, DECIMAL(12, 6) использует 6 байт памяти.
Числа хранятся в бинарном формате отдельно для целой и дробной части, что позволяет точно хранить числа без потерь. Неточностей при вычислениях не возникает.
Вывод:float|real:
🟢 высокая скорость вычислений;
🟢 занимает меньше памяти;
🔴 неточность.
Следует использовать для данных, которые не требуют высокой точности, например, для приближённых значений, процентов, статистики и других данных, где точность не критична.
double:
🟢 высокая скорость вычислений;
🟢 позволяет хранить более крупные числа и более точно, чем float;
🔴 занимает больше памяти;
🔴 неточность.
Использовать, если возможностей
float недостаточно.
decimal|numeric:
🟢 высокая точность;
🔴 более низкая скорость вычислений;
🔴 занимает больше памяти (переменное количество).
Использовать, когда необходима высокая точность, например, для хранения балансов, сумм денег, финансовых операций.
👉
@PHPgx | #tips