Теперь кажется, что разделение 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);
}
}
Обратите внимание, что 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
Мобильная версия