亚洲乱码中文字幕综合,中国熟女仑乱hd,亚洲精品乱拍国产一区二区三区,一本大道卡一卡二卡三乱码全集资源,又粗又黄又硬又爽的免费视频

一個Java中BigDecimal的問題記錄

 更新時間:2021年11月25日 10:08:58   作者:愛編程的小魚  
這篇文章主要給大家介紹了關(guān)于Java中一個BigDecimal問題的相關(guān)資料,通過文中介紹的方法可以很方便的解決BigDecimal進行計算的時候不管怎么計算,最后得到的值都沒有變化的問題,需要的朋友可以參考下

題主今天在用 BigDecimal 進行計算的時候,遇到一個問題,那就是不管怎么計算,最后得到的值都沒有變化,這里題主就有些疑惑了,用的也是推薦的API,先看代碼:

BigDecimal totalPay = new BigDecimal("0");
BigDecimal totalIncomeOfMaster = new BigDecimal("0");
BigDecimal totalIncomeOfLB = new BigDecimal("0");
BigDecimal totalRebate = new BigDecimal("0");
if (CollectionUtils.isNotEmpty(rebateDetailVOS.getList())) {
    for (RebateDetailVO rebateDetailVO : rebateDetailVOS.getList()) {
        totalPay.add(rebateDetailVO.getFinalPayOfUser());
        totalIncomeOfMaster.add(rebateDetailVO.getFinalIncomeOfMaster());
        totalIncomeOfLB.add(rebateDetailVO.getFinalIncomeOfLB());
        totalRebate.add(rebateDetailVO.getRebateAmt());
    }
}

初次觀察,這份代碼沒有問題,但是運行之后的結(jié)果沒有達到預(yù)期,于是題主進入add()方法內(nèi)部觀看了一下源碼:

問題就出在這里,這里會返回一個new BigDecimal 對象,所以求和的值并不會被記錄。

然后題主就對代碼進行修改:

BigDecimal totalPay = new BigDecimal("0");
BigDecimal totalIncomeOfMaster = new BigDecimal("0");
BigDecimal totalIncomeOfLB = new BigDecimal("0");
BigDecimal totalRebate = new BigDecimal("0");
if (CollectionUtils.isNotEmpty(rebateDetailVOS.getList())) {
    for (RebateDetailVO rebateDetailVO : rebateDetailVOS.getList()) {
        totalPay = totalPay.add(rebateDetailVO.getFinalPayOfUser());
        totalIncomeOfMaster = totalIncomeOfMaster.add(rebateDetailVO.getFinalIncomeOfMaster());
        totalIncomeOfLB = totalIncomeOfLB.add(rebateDetailVO.getFinalIncomeOfLB());
        totalRebate = totalRebate.add(rebateDetailVO.getRebateAmt());
    }
}

結(jié)果達到預(yù)期

附:Java中 BigDecimal 值小數(shù)點后的最大位數(shù)是多少?

解決方案

這幾乎是無限的。如果將scale設(shè)置為整數(shù)的最大值,則可以在小數(shù)點后存儲大約20億個數(shù)字,但如果嘗試執(zhí)行此操作,可能會耗盡內(nèi)存。如果您需要存儲這么多的數(shù)字以確定限制是一個問題,那么您可能需要重新考慮程序的設(shè)計。

參見 BigDecimal文檔

不可變,任意精度的帶符號十進制數(shù)。 BigDecimal由任意精度整數(shù)非標度值和32位整數(shù)標度組成。如果為零或正數(shù),則比例是小數(shù)點右側(cè)的位數(shù)。如果是負數(shù),則將數(shù)字的未縮放值乘以10來表示比例的否定。因此,BigDecimal表示的數(shù)字的值是(unscaledValue×10 -scale )。

總結(jié)

到此這篇關(guān)于Java中一個BigDecimal問題的文章就介紹到這了,更多相關(guān)Java BigDecimal問題內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

最新評論