Вот моя функция округления:
return new BigDecimal("4.780").setScale(2, RoundingMode.HALF_UP).doubleValue();
На мой взгляд, результат должен быть 4,8, но он возвращает мне 4,78. Кто-нибудь может объяснить почему?
извините места = 2
Вот и ваш ответ. places устанавливает масштаб BigDecimal. Если вы хотите 4.8, установите places на 1.
Это не «работает неправильно», если вы не покажете Зачем, что это неправильно, а вы, конечно же, этого не сделали.
Спасибо за объяснение. Теперь понятнее. Но мне нужна следующая градация 1.00, 1.50, 2.00 Как решить эту проблему с помощью setScale?
Понятнее, чем какие? Вы запросили два десятичных знака: у вас два десятичных знака. Чего еще ты ожидал? И почему?
Если вы хотите округлить до ближайшей половины: умножьте на 2, округлите, разделите на 2.
@AndyTurner Нет. Установите нужный масштаб и режим округления. Остальное сделано за вас. И HALF_UP - это не то же самое, что «ближайшая половина».
@EJP, как установить масштаб, если нужно округлить до 0,5?
@AndyTurner Он этого не делает. Он хочет округлить HALF_UP. Это прямо в коде. Ваш комментарий не актуален.
@EJP "Но мне нужна следующая градация 1.00, 1.50, 2.00" мне кажется, что они округлены до ближайших 0,5 с; или неустановленные входные данные просто являются числами, которые округляются до 0,5 градаций при округлении до 2dp. Мне кажется более вероятным первый вариант.




Как сказано в Javadoc:
If zero or positive, the scale is the number of digits to the right of the decimal point
Итак, если вы установите его на 2, справа от десятичной точки будут две цифры.
Что такое
places?