BigDecimal.ROUND_HALF_UP和RoundingMode.HALF_UP之间的区别?

时间:2013-11-02 22:32:17

标签: java rounding bigdecimal

以下内容:

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)

2 个答案:

答案 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