6

下面:

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)
4

2 回答 2

3

请注意常量:

RoundingMode.HALF_UP
BigDecimal.ROUND_HALF_UP

根据 Javadocs 和源代码,意思完全一样:

public enum RoundingMode {
....
HALF_UP(BigDecimal.ROUND_HALF_UP),
....
} 
于 2014-01-21T07:46:39.573 回答
-1

请使用BigDecimal.ROUND_HALF_UP而不是RoundingMode.HALF_UP因为 RoundingMode.HALF_UP 在内部调用 BigDecimal.ROUND_HALF_UP 所以两者都会给你相同的结果,但 RoundingMode.HALF_UP 需要多一步。

来自 java 文档的来源:

BigDecimal.ROUND_HALF_UP

public static final RoundingMode HALF_UP 舍入模式向“最近的邻居”舍入,除非两个邻居是等距的,在这种情况下向上舍入。如果丢弃的分数 ≥ 0.5,则行为与 RoundingMode.UP 相同;否则,行为与 RoundingMode.DOWN 相同。请注意,这是学校通常教授的舍入模式。(点击这里了解更多

RoundingMode.HALF_UP

public final static int ROUND_HALF_UP 如果丢弃的分数 >= .5,则与 ROUND_UP 一样;否则,行为与 ROUND_DOWN 相同。(向“最近的邻居”四舍五入,除非两个邻居是等距的,在这种情况下四舍五入。)(点击这里了解更多

于 2018-06-26T10:33:52.273 回答