BigDecimal.setScale работает неправильно

Вот моя функция округления:

return new BigDecimal("4.780").setScale(2, RoundingMode.HALF_UP).doubleValue();

На мой взгляд, результат должен быть 4,8, но он возвращает мне 4,78. Кто-нибудь может объяснить почему?

Что такое places?

sarkasronie 28.03.2018 10:37

извините места = 2

Yevhen 28.03.2018 10:38

Вот и ваш ответ. places устанавливает масштаб BigDecimal. Если вы хотите 4.8, установите places на 1.

sarkasronie 28.03.2018 10:39

Это не «работает неправильно», если вы не покажете Зачем, что это неправильно, а вы, конечно же, этого не сделали.

user207421 28.03.2018 10:45

Спасибо за объяснение. Теперь понятнее. Но мне нужна следующая градация 1.00, 1.50, 2.00 Как решить эту проблему с помощью setScale?

Yevhen 28.03.2018 10:46

Понятнее, чем какие? Вы запросили два десятичных знака: у вас два десятичных знака. Чего еще ты ожидал? И почему?

user207421 28.03.2018 10:49

Если вы хотите округлить до ближайшей половины: умножьте на 2, округлите, разделите на 2.

Andy Turner 28.03.2018 10:57

@AndyTurner Нет. Установите нужный масштаб и режим округления. Остальное сделано за вас. И HALF_UP - это не то же самое, что «ближайшая половина».

user207421 28.03.2018 11:10

@EJP, как установить масштаб, если нужно округлить до 0,5?

Andy Turner 28.03.2018 11:11

@AndyTurner Он этого не делает. Он хочет округлить HALF_UP. Это прямо в коде. Ваш комментарий не актуален.

user207421 28.03.2018 11:31

@EJP "Но мне нужна следующая градация 1.00, 1.50, 2.00" мне кажется, что они округлены до ближайших 0,5 с; или неустановленные входные данные просто являются числами, которые округляются до 0,5 градаций при округлении до 2dp. Мне кажется более вероятным первый вариант.

Andy Turner 28.03.2018 11:34
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
В компьютерном программировании биты играют важнейшую роль в представлении и манипулировании данными на двоичном уровне. Побитовые операции...
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Приходилось ли вам сталкиваться с требованиями, в которых вас могли попросить поднять тревогу или выдать ошибку, когда метод Java занимает больше...
Полный курс Java для разработчиков веб-сайтов и приложений
Полный курс Java для разработчиков веб-сайтов и приложений
Получите сертификат Java Web и Application Developer, используя наш курс.
3
11
185
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Как сказано в Javadoc:

If zero or positive, the scale is the number of digits to the right of the decimal point

Итак, если вы установите его на 2, справа от десятичной точки будут две цифры.

Другие вопросы по теме