1,案例
支付平台的單位是分,而業務系統的單位是元,所以傳到支付系統時要乘以100
@test
public void test_divide2()
執行結果:1010.99994
執行結果不精確!!!
但是預期結果是:1011
2,解決方法:使用bigdecimal
@test
public void test_divide()
執行結果:
使用bigdecimal
最後
以上就是一種對於支付系統金錢資料精度丟失的解決方式,大概核心總結為以下幾點
不採用float、double而採用bigdecimal進行代替運算(如果採用bigdecimal運算構造引數需要以字串形式,否則還是有可能出現精度丟失問題)
對外採用string型別,為防止前後端json互動導致的精度丟失問題
內部進行運算時先轉為分進行運算,這樣可以避免運算導致的精度丟失問題
資料庫採用bigdecimal切不設定小數為進行儲存
浮點數精度問題
一 例子 首先我們去編譯器試試 double a 1.9 通過新增監視檢視a的值 會發現a的值是1.8999999 二 開始今天的學習 在最開始學c 的時候並沒有對浮點數進行很深入的學習,認為浮點不就是小數嘛,首先在c 的巨集裡面有 flt max 和 flt min 的定義,float是四位元組的...
浮點數的精度問題
float 1bit 符號位 8bits 指數字 23bits 尾數字 double 1bit 符號位 11bits 指數字 52bits 尾數字 對於二進位制的小數 1.1 1 20 1 2 1 1 1 2 1.5 1.01 1 20 0 2 1 1 2 2 1 1 4 1.25 1.0011 1...
浮點數精度丟失問題
c 中的浮點數,分單精度 float 和雙精度 double float 是 system.single 的別名,介於 3.402823e38 和 3.402823e38 之間的32位數字,符合二進位制浮點演算法的 iec 60559 1989 ieee 754 標準 double 是 system...