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))
這樣結果就正確了。