簡體   English   中英

BigDecimal和MathContext

[英]BigDecimal and MathContext

有人可以解釋為什么這兩個結果不同嗎?

BigDecimal bd1 = new BigDecimal(1234.5678)
    .divide(
        new BigDecimal(1.19),
        4,
        RoundingMode.CEILING
    );
BigDecimal bd2 = new BigDecimal(1234.5678)
    .divide(
        new BigDecimal(1.19),
        new MathContext(4, RoundingMode.CEILING)
    );

結果

bd1: 1037.4520
bd2: 1038

因為在MathContext(4, RoundingMode.CEILING) ,4是精度,但在.divide(new BigDecimal(1.19), 4, RoundingMode.CEILING); ,4為刻度。 您可以在此處看到“精度”和“比例”之間的區別

提到但沒有直接解決的一個重要問題是“ 精度 ”和“ 小數 位數 ”之間的區別,以及在兩種陳述中如何使用它們。 precision ”是數字中有效數字的總數。 scale ”是小數點右邊的位數。

因此,如果您將第二個更改為

final BigDecimal bd2 = new BigDecimal(1234.5678)
        .divide(
                new BigDecimal(1.19),
                new MathContext(8, RoundingMode.CEILING)
        );

您有相同的結果:

1037.4520
1037.4520

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM