Проверяет понимание различий между типами FLOAT и DECIMAL при хранении денежных значений и связанных с этим рисков.
Тип FLOAT в SQL (и в большинстве языков программирования) основан на двоичном представлении чисел с плавающей точкой. Это означает, что многие десятичные дроби, например 0.1, не могут быть представлены точно в двоичной системе. В результате операции с FLOAT могут давать незначительные ошибки округления, которые накапливаются при множестве вычислений. Для денежных сумм даже малейшая погрешность недопустима, так как она может привести к расхождениям в отчетности или финансовых операциях.
Тип DECIMAL (также известный как NUMERIC) хранит число как точное десятичное значение с фиксированной точностью и масштабом. Например, DECIMAL(10,2) хранит числа до 99999999.99 с двумя знаками после запятой. Все арифметические операции с DECIMAL выполняются точно, без ошибок округления, что делает его идеальным для хранения денежных сумм, курсов валют и других величин, где важна точность.
CREATE TABLE transactions (
id INT PRIMARY KEY,
amount DECIMAL(10,2),
rate FLOAT
);
INSERT INTO transactions VALUES (1, 0.1, 0.1);
SELECT amount * 3 AS decimal_result, rate * 3 AS float_result
FROM transactions;
-- decimal_result: 0.30, float_result: 0.30000000000000004Как видно, даже простое умножение на FLOAT дает неточный результат, тогда как DECIMAL сохраняет точность.
DECIMAL следует использовать везде, где речь идет о деньгах: цены, зарплаты, налоги, балансы счетов. FLOAT подходит для научных расчетов, измерений, графики и других областей, где небольшая погрешность допустима и не критична.
Итог: Для хранения денежных сумм всегда выбирайте DECIMAL, чтобы гарантировать точность и избежать проблем с округлением. FLOAT используйте только там, где точность не критична.
Уровень
Рейтинг:
4
Сложность:
3
Навыки
Postgres
SQL
Ключевые слова
Подпишись на Node.js Developer в телеграм