今天在敲**的時候遇到了乙個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...