為什么要用BigDecimal


一般貨幣計算的時候都要用到BigDecimal類,為什么一般不適用float或者double呢?

 

先看一下浮點數的二進制表示:

小數 0.125

0.125 * 2 = 0.25

0

0.25 * 2 = 0.5

0

0.5 * 2 = 1

1

算法是 *2 直到沒有小數為止  ,得到0.125 二進制表示為0 . 0 0 1 

 

小數 0.9

0.9 * 2 = 1.8 

取整數部分 1

0.8(1.8的小數部分) * 2 = 1.6   

1

0.6 * 2 = 1.2  

1

0.2 * 2 = 0.4  

0

0.4 * 2 = 0.8  

0

0.8 * 2=1.6

1

0.6 * 2 =1.2  

0

…..

….

從上至下:1 1 1 0 0 1 0 ......

計算過程無限循環,乘以2永遠不可能消滅小數部分,這就證明,小數的二進制有時並不能精確表示;

這就如同十進制不能表示1/3一樣;

 

 

貨幣類計算要求精度較高,非常大量的,很小的精度誤差也會積少成多變成大誤差,所以需要用到BigDecimal。


參考:https://blog.csdn.net/tfstone/article/details/81392540


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM