BigDecimal setScale () vs round () [duplicate]

Рид дал вам правильный ответ. Также стоит отметить, что вы можете использовать другие подписчики делегатов помимо Action.

Существуют такие общие версии, как Action (один аргумент), Action (два аргумента) и т. д. Также, если ваш метод имеет тип возврата, проверьте Func.

Или, конечно, вы можете определить свой собственный тип делегата.

111
задан user 1 October 2010 в 23:29
поделиться

2 ответа

Одним из важных моментов, на которые намечено, но не прямо адресовано, является разница между «точностью» и «шкалой» и тем, как они используются в двух утверждениях. «Точность» - это общее число значащих цифр в числе. «scale» - это число цифр справа от десятичной точки.

Конструктор MathContext допускает только точность и RoundingMode в качестве аргументов, поэтому масштаб никогда не указывается в первом утверждении.

setScale(), очевидно, принимает масштаб как аргумент, а также RoundingMode, однако точность не указана во втором утверждении.

Если вы переместите десятичную точку на одно место вправо, разница станет clear:

// 1.
new BigDecimal("35.3456").round(new MathContext(4, RoundingMode.HALF_UP));
//result = 35.35
// 2.
new BigDecimal("35.3456").setScale(4, RoundingMode.HALF_UP);
// result = 35.3456
168
ответ дан Stephan 21 August 2018 в 23:38
поделиться
  • 1
    Re: & quot; Точность & quot; - общее количество цифр в числе. & quot; Нет. Точность - это количество значащих цифр. Точность 0,000042M равна 2. – David J. 4 December 2013 в 06:16
  • 2
    См. «Точность»: число цифр начинается с самой левой ненулевой цифры точного результата. docs.oracle.com/javase/7/docs/api/java/math/BigDecimal.html – Eddy 6 September 2016 в 07:06
  • 3
    если «Точность - это число значащих цифр». чем почему точность 0,0000009 идет как 2? это должно быть 1 – Sanchi Girotra 24 October 2016 в 10:10
  • 4
    Как оценивается значение вашего BigDecimal? Как вы выводите значение (используя String.format () может скрыть значительные цифры)? – dale peters 25 October 2016 в 14:58
  • 5
    @SanchiGirotra Точность - это «количество цифр в немасштабированном значении». Точность 2 с немасштабированным значением 90 и шкалой 8 дает 0,0000009. Как и точность 1, немасштабированное значение 9 и шкала 7. – megaflop 18 November 2016 в 15:56

Есть действительно большая разница, о которой вы должны помнить. setScale действительно устанавливает масштаб вашего номера, тогда как круг округляет ваш номер до указанных цифр, НО «начинается с самой левой цифры точного результата», как указано в jdk. Так что в отношении вашего образца результаты одинаковы, но вместо этого попробуйте 0,0034. Вот моя заметка об этом в моем блоге:

http://araklefeistel.blogspot.com/2011/06/javamathbigdecimal-difference-between.html

45
ответ дан user817756 21 August 2018 в 23:38
поделиться
Другие вопросы по тегам:

Похожие вопросы: