Выбор ответа Junior Проектирование и нормализация спрашивают часто обновлено
Тип для денег
Вопрос
Какой тип выбрать для суммы платежа в рублях с копейками?
Попробуйте сами
Выберите вариант, и откроется разбор.
Показать ответ и разбор
Коротко
Правильный ответ: numeric(12,2) или копейки в bigint. Числа с плавающей точкой хранят двоичное приближение: 0.1 + 0.2 даёт 0.30000000000000004, на суммах накапливаются ошибки. numeric точен, копейки в bigint тоже точны и быстры.
Варианты ответа
double precisionс округлениемreal, его точности для копеек хватитmoney, потому что он для этого созданnumeric(12,2)или копейки вbigintправильный ответ
Разбор
Числа с плавающей точкой хранят двоичное приближение: 0.1 + 0.2 даёт 0.30000000000000004, на суммах накапливаются ошибки. numeric точен, копейки в bigint тоже точны и быстры. Тип money в PostgreSQL существует, но зависит от настройки lc_monetary, не хранит валюту и неудобен при смене локали, поэтому его обычно избегают.
Ответьте сами, а не прочитайте
В тренажёре вопрос попадёт в повторения и вернётся, когда начнёт забываться. Плюс билеты с зачётом: 20 вопросов, не больше 2 ошибок.