使用BigDecimal踩到的坑

2021-10-07 20:48:31 字數 888 閱讀 8816

今天在敲**的時候遇到了乙個bigdecimal的問題,**如下:

test testa;

test testb = com.alibaba.fastjson.json.

parseobject

(string1, test.

class);

if(testa.

equals

(testb)

)

testa和testb都是一樣的引數,其中有乙個引數是bigdecimal型別的,testa裡值為0.005,testb經過json轉換後值為0.0050,末尾多了乙個0。

萬思不得其解

檢視原始碼後才知道,原來bigdecimal的預設構造方法是如果你不指定傳入的數字型別,預設是double型別,此時就已經出現了精度問題了。但是我這是在json字串裡面傳的值,讓上游改比較麻煩,所以我利用到bigdecimal.striptrailingzeros()方法去除末尾多餘的0。當然這裡是我是知道傳入biddecimal的值是double型別的,如果你不能確定你傳入的數是整數還是浮點數,那還是用正規表示式去掉吧。

解決方法:

testb.

setdata

(testb.

getdata()

.striptrailingzeros()

);或者正規表示式

testb.

setdata

(testb.

getdata()

.replaceall

("0+?$",""));

BigDecimal的使用記錄

最近一直忙於工作,好久沒更新部落格了。今天趕在下班之前做乙個簡單的記錄。在專案中需要計算一筆交易的返現 手續費 分賬串等資訊,大量的使用到bigdecimal,趕在下班之前做乙個簡單的記錄。在專案中對於金額的操作,我們都是選擇使用bigdecimal 跟金錢打交道,對於精度要求都很高 它支援任何精度...

BigDecimal使用方式

bigdecimal所建立的是物件,故我們不能使用傳統的 等算術運算子直接對其物件進行數 算,而必須呼叫其相對應的方法。方法中的引數也必須是bigdecimal的物件。構造器是類的特殊方法,專門用來建立物件,特別是帶有引數的物件。bigdecimal int 建立乙個具有引數所指定整數值的物件。bi...

bigdecimal使用問題

初始化bigdecimal型別資料的時候,不要用下圖所示的構造初始化,否則很可能會有問題 理由 如果傳入 中的數字為小數型別,則會出現下圖所示的問題。我看了下jdk api 的說明,找到了如下說法。總結一下就是 轉換小數想達到你想要的結果用 new bigdecimal string 或者 bigd...