3

BigDecimal から奇妙な動作が見られます mathContext を使用して除算を行うと、スケールと丸めモードを直接指定して除算を行う場合とは出力が異なります 同じ出力を提供する必要があると思われる例を次に示します

public static void main(String...args){
    MathContext mc = new MathContext(3,RoundingMode.HALF_UP);
    BigDecimal four = new BigDecimal(4);
    BigDecimal three = new BigDecimal(3);
    System.out.println(four.divide(three,3,RoundingMode.HALF_UP));
    System.out.println(four.divide(three,mc));
}

出力:

1.333
1.33

MathContext を使用すると、スケールの扱いが異なるようです。または、いつどれを使用するかわかりません。

4

1 に答える 1

5

divideメソッドを使用すると、結果のスケールBigDecimalを指定できます。大まかに言えば、小数点以下の桁数です。 は、数値が小数点以下 3 桁で表現されることを意味します。負の位取りは、整数の末尾にある無意味なゼロの数を示します。たとえば、最も近い 1000 に丸めるには、 を指定できます。 scale = 3scale = -3

four.divide(three,3,RoundingMode.HALF_UP);  // scale = 3, so round to 3 decimal places

しかしアMathContextは違う。精度、つまり有効桁数を指定できます。これはscaleとは異なります。

MathContext mc = new MathContext(3,RoundingMode.HALF_UP);
four.divide(three, mc); // precision = 3, so round to 3 significant figures
于 2014-12-18T23:36:35.000 に答える