Почему RoundingMode.HALF_EVEN в делении BigDecimal округляет от 0,454 до 0,5?JAVA

Программисты JAVA общаются здесь
Ответить
Anonymous
 Почему RoundingMode.HALF_EVEN в делении BigDecimal округляет от 0,454 до 0,5?

Сообщение Anonymous »

Режим округления HALF_EVEN предназначен для округления (десятичного) числа, оканчивающегося на 5, до ближайшего даже менее точного числа (например, 4,5 округляется до 4, тогда как 5,5 округляется до 6).
Теперь кажется, что разделение Java BigDecimal не подчиняется этому правилу; следующий код округляет значение от 0,45 до 0,5:

Код: Выделить всё

import java.math.*;

class Round {
public static void main(String[] args) {
BigDecimal five = BigDecimal.valueOf(5);
BigDecimal eleven = BigDecimal.valueOf(11);
BigDecimal x = five.divide(eleven, 1, RoundingMode.HALF_EVEN);
System.out.println(x);
}
}
Выходное значение 0,5
Обратите внимание, что 5/11 = 0,4545454545... поэтому, глядя на первые две цифры после запятой, 0,45, мы явно хотим чтобы увидеть, что это округлено до ближайшего четного соседа, т.е. до 0,40, а не 0,50.
Может ли кто-нибудь это объяснить?
(Если это имеет значение, я использую java -version = openjdk version "11.0.15" 19 апреля 2022 г.)
Примечание:< /h3>
  • Речь идет не об округлении перед помещением значения в BigDecimal; действительно
    результат не меняется при использовании строкового конструктора

Код: Выделить всё

     BigDecimal five = new BigDecimal("5");
BigDecimal eleven = new BigDecimal("11");
BigDecimal x = five.divide(eleven, 1, RoundingMode.HALF_EVEN);
  • Это также не зависит от масштаба, в котором мы округляем (если масштаб нечетный), и вы можете масштабировать число вверх (например, округлить 500/11).


Подробнее здесь: https://stackoverflow.com/questions/723 ... 454-to-0-5
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «JAVA»