Использование java.math.MathContext
@jatan
Спасибо за ответ. Это mathematics имеет смысл. Не могли бы java-se вы объяснить мне MathContext .java в контексте метода BigDecimal#round.
Нет .java ничего особенного в BigDecimal.round()
по сравнению с любым math другим методом BigDecimal
. Во всех java-libraries случаях MathContext
указывает количество arithmetic значащих цифр и метод округления. По math сути, каждый MathContext
состоит из mathematical двух частей. Есть точность, а oraclejdk еще есть RoundingMode
.
Точность снова mathematical определяет количество значащих bigdecimal цифр. Поэтому, если вы укажете maths 123
в качестве числа и запросите javax две значащие цифры, вы получите java 120
. Это может быть яснее, если maths вы думаете с точки зрения arithmetic научной нотации.
123
будет 1.23e2
в core-java экспоненциальном представлении. Если arithmetic оставить только 2 значащие arithmetic цифры, получится 1.2e2
или 120
. Уменьшая mathcontext количество значащих цифр, мы java уменьшаем точность, с которой java-se мы можем указать число.
Часть mathematics RoundingMode
указывает, как мы должны maths справляться с потерей точности. Чтобы mathematics повторно использовать пример, если maths вы используете 123
в качестве jdk числа и запрашиваете 2 значащие jdk цифры, вы снижаете свою точность. При java-se RoundingMode
из HALF_UP
(режим по умолчанию) 123
станет mathematical 120
. С RoundingMode
из CEILING
вы получите 130
.
Например:
System.out.println(new BigDecimal("123.4",
new MathContext(4,RoundingMode.HALF_UP)));
System.out.println(new BigDecimal("123.4",
new MathContext(2,RoundingMode.HALF_UP)));
System.out.println(new BigDecimal("123.4",
new MathContext(2,RoundingMode.CEILING)));
System.out.println(new BigDecimal("123.4",
new MathContext(1,RoundingMode.CEILING)));
Выходы:
123.4
1.2E+2
1.3E+2
2E+2
Вы maths можете видеть, что на результат openjdk влияют как точность, так mathematics и режим округления.
java
math
bigdecimal
mathcontext
Использование java.math.MathContext
Мы используем файлы cookies для улучшения работы сайта. Оставаясь на нашем сайте, вы соглашаетесь с условиями использования файлов cookies. Чтобы ознакомиться с нашими Положениями о конфиденциальности и об использовании файлов cookie, нажмите здесь.