Выбор ответа Junior Проектирование и нормализация спрашивают часто обновлено

Тип для денег

Вопрос

Какой тип выбрать для суммы платежа в рублях с копейками?

Попробуйте сами

Выберите вариант, и откроется разбор.

Показать ответ и разбор

Коротко

Правильный ответ: numeric(12,2) или копейки в bigint. Числа с плавающей точкой хранят двоичное приближение: 0.1 + 0.2 даёт 0.30000000000000004, на суммах накапливаются ошибки. numeric точен, копейки в bigint тоже точны и быстры.

Варианты ответа

  1. double precision с округлением
  2. real, его точности для копеек хватит
  3. money, потому что он для этого создан
  4. numeric(12,2) или копейки в bigintправильный ответ

Разбор

Числа с плавающей точкой хранят двоичное приближение: 0.1 + 0.2 даёт 0.30000000000000004, на суммах накапливаются ошибки. numeric точен, копейки в bigint тоже точны и быстры. Тип money в PostgreSQL существует, но зависит от настройки lc_monetary, не хранит валюту и неудобен при смене локали, поэтому его обычно избегают.

Ответьте сами, а не прочитайте

В тренажёре вопрос попадёт в повторения и вернётся, когда начнёт забываться. Плюс билеты с зачётом: 20 вопросов, не больше 2 ошибок.