@jatan
спасибо за Вас ответ.Все понятно. Можно ли объяснить меня MathContext в контексте метода BigDecimal#round.
нет ничего специального [приблизительно 112] по сравнению с [1 125] никакой другой BigDecimal
метод. Во всех случаях, эти MathContext
определяет число значащих цифр и округляющейся техники. В основном существует две части каждого MathContext
. Существует точность, и существует также RoundingMode
.
точность снова определяет число значащих цифр. Таким образом, если Вы определяете 123
как число и просите 2 значащих цифры, Вы собираетесь добраться 120
. Могло бы быть более ясно, думаете ли Вы с точки зрения экспоненциального представления.
123
был бы 1.23e2
в экспоненциальном представлении. Если Вы только сохраняете 2 значащих цифры, то Вы добираетесь 1.2e2
, или 120
. Путем сокращения количества значащих цифр мы уменьшаем точность, с которой мы можем определить число.
RoundingMode
часть определяет, как мы должны обработать потерю точности. Для многократного использования примера, если Вы используете 123
в качестве числа и просите 2 значащих цифры, Вы уменьшили свою точность. С RoundingMode
из [1 116] (режим по умолчанию), 123
станет 120
. С RoundingMode
из [1 120], Вы доберетесь 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
Вы видите, что и точность и округляющийся режим влияют на вывод.
http://www.codeproject.com/KB/IP/iphlpapi.aspx также может помочь