亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

減去 bigDecimal 數字會產生 0 的精度?

減去 bigDecimal 數字會產生 0 的精度?

慕的地8271018 2022-10-07 16:32:16
我正在減去兩個 bigDecimal 數字。進入減法方法,它們都具有非零精度,但結果精度= 0。據我所知,精度為 0 的 bigDecimal 數是不可能的。即使 0 的精度為 1。精度是未縮放值中的位數。例如,對于數字 123.45,返回的精度為 5。(另見BigDecimal、precision 和 scale)。有問題的區域:BigDecimal test = (centerHP.getReal().subtract(inverseScale));centerHP.getReal()返回從該行創建的bigDecimalnew BigDecimal(Double.toString(center.getReal()))對于上下文center.real = -0.79,它是雙精度的。所以它是有效的new BigDecimal("-0.79")inverseScale 只是 1double scale = 1;BigDecimal inverseScale = (BigDecimal.ONE.divide(new BigDecimal(Double.toString(scale))));我希望 test 是一個值為 -1.79 的 bigDecimal,int 表示應該是 -179,精度為 3,小數位數為 2。但是,緊隨 BigDecimal 類中減法方法中的加法運算之后,我的值如下:和測試等于:請注意,所有其他值都是正確的,只是精度似乎是錯誤的。
查看完整描述

1 回答

?
呼如林

TA貢獻1798條經驗 獲得超3個贊

從該字段的 javadoc 中,0意味著精度未知。


/**

 * The number of decimal digits in this BigDecimal, or 0 if the

 * number of digits are not known (lookaside information).  If

 * nonzero, the value is guaranteed correct.  Use the precision()

 * method to obtain and set the value if it might be 0.  This

 * field is mutable until set nonzero.

 *

 * @since  1.5

 */

private transient int precision;

該方法precision()懶惰地確定精度。


public int precision() {

    int result = precision;

    if (result == 0) {

        long s = intCompact;

        if (s != INFLATED)

            result = longDigitLength(s);

        else

            result = bigDigitLength(inflate());

        precision = result;

    }

    return result;

}


查看完整回答
反對 回復 2022-10-07
  • 1 回答
  • 0 關注
  • 174 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號