首頁歷史 > 正文

BigDecimal注意事項

2022-02-22由 合縱聯橫 發表于 歷史

願在前進的道路上,給後來者於參考,給前進著於回憶,願結識更多前進者,在這鋪滿荊棘的道路上,願你我共同砥礪前行。

BigDecimal注意事項

想起以前有bigdecimal的坑,在這裡跟大家分享一下。

大家都知道,java做金額計算的時候大多數用的bigdecimal。

有一次在做金額計算的時候,總是少個幾分錢,

測試找來,程式碼也不是我寫的,是個老專案。

然後慢慢理邏輯,本地看了一下,走到金額計算的哪兒,這哥們兒用了

個(例子)new Bigdecimal(0。95) ,發現得出的值不是0。95,而是0。94後邊跟了一大堆

然後我自己寫了測試類看了一下,

BigDecimal doubledecimal = new BigDecimal(0。95);System。out。println(doubledecimal);

結果一看 值是 0。9499999999999999555910790149937383830547332763671875;

後來改為

BigDecimal valueofdoubledecimal = BigDecimal。valueOf(0。95);System。out。println(valueofdoubledecimal);

值出來是0。95。

改過來後,看到好多地方都用了new bigdecimal,只要不是double用new沒啥問題

就是在使用double的小數點第二位開始發生變化的。

所以要用bigdecimal傳的引數是double型別的時候,下邊兩種寫法都可以。

BigDecimal valueofdoubledecimal = BigDecimal。valueOf(0。95);BigDecimal stringdecimal= new Bigdecimal(String。valueof(0。95))

這樣結果就正確了。

頂部