以下内容:
new MathContext(precision, RoundingMode.HALF_UP);
似乎有效。但是,以下内容返回错误:
new MathContext(precision, BigDecimal.ROUND_HALF_UP);
错误:
java: no suitable constructor found for MathContext(int,int)
constructor java.math.MathContext.MathContext(java.lang.String) is not applicable
(actual and formal argument lists differ in length)
constructor java.math.MathContext.MathContext(int,java.math.RoundingMode) is not applicable
(actual argument int cannot be converted to java.math.RoundingMode by method invocation conversion)
constructor java.math.MathContext.MathContext(int) is not applicable
(actual and formal argument lists differ in length)
答案 0 :(得分:2)
请注意常数:
RoundingMode.HALF_UP
BigDecimal.ROUND_HALF_UP
根据Javadocs并根据源代码表示完全相同:
public enum RoundingMode {
....
HALF_UP(BigDecimal.ROUND_HALF_UP),
....
}
答案 1 :(得分:-1)
由于RoundingMode,请使用 BigDecimal.ROUND_HALF_UP 而不是 RoundingMode.HALF_UP 。HALF_UP在内部调用BigDecimal.ROUND_HALF_UP,因此两者都会给您相同的结果,但RoundingMode.HALF_UP将为您提供相同的结果还需要一步。
来自Java文档的来源:
BigDecimal.ROUND_HALF_UP
公共静态最终RoundingMode HALF_UP 舍入模式向“最近的邻居”舍入,除非两个邻居都等距,在这种情况下将舍入。如果舍弃分数≥0.5,则表现为RoundingMode.UP;否则,其行为与RoundingMode.DOWN相同。请注意,这是学校通常教授的取整模式。 (click here to know more)
RoundingMode.HALF_UP
公共最终静态int ROUND_HALF_UP 如果丢弃的分数> = .5,则表现为ROUND_UP;否则,表现与ROUND_DOWN相同。 (朝着“最近的邻居”舍去,除非两个邻居都等距,在这种情况下会四舍五入。)(click here to know more)