💻Как нам хранить числа с плавающей запятой в базе данных?



Для этого существует несколько типов данных:



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