Выбор ответа Junior Основы: типы, обёртки, static спрашивают часто обновлено

Деньги в double

Вопрос

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

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

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

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

Коротко

Правильный ответ: BigDecimal (или целые копейки в long). double и float хранят двоичные дроби, 0.1 в них не представимо точно, ошибки округления накапливаются.

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

  1. double: у него 15-16 значащих цифр, этого хватает
  2. BigDecimal (или целые копейки в long)правильный ответ
  3. float: экономит память
  4. Double: обёртка хранит точное значение

Разбор

double и float хранят двоичные дроби, 0.1 в них не представимо точно, ошибки округления накапливаются. BigDecimal хранит десятичное число точно и даёт явный контроль округления (setScale, RoundingMode). Создавать его стоит из строки или через BigDecimal.valueOf(double), а не new BigDecimal(0.1). Обёртка Double хранит то же двоичное значение, что и примитив.

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

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