為什麼要用BigDecimal

2022-04-30 04:39:11 字數 588 閱讀 3269

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

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

小數 0.125

0.125 * 2 = 0.25

0.25 * 2 = 0.5

0.5 * 2 = 1

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

小數 0.9

0.9 * 2 = 1.8 

取整數部分 1

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

0.6 * 2 = 1.2  

0.2 * 2 = 0.4  

0.4 * 2 = 0.8  

0.8 * 2=1.6

0.6 * 2 =1.2  

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

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

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

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

參考:

為什麼要用 enable shared from

樓主 hma if you think you can,you can.panrainbow 憂鬱淡藍 於 tue nov 9 11 48 38 2010 提到 引入enable shared from this的原因是可以實現返回值為指向該類本身的 shared ptr,為什麼以this為拷貝構造...

為什麼要用補碼

在探求為何機器要使用補碼之前,讓我們先了解原碼,反碼和補碼的概念.對於乙個數,計算機要使用一定的編碼方式進行儲存.原碼,反碼,補碼是機器儲存乙個具體數字的編碼方式.原碼就是符號位加上真值的絕對值,即用第一位表示符號,其餘位表示值.比如如果是8位二進位制 1 原 0000 0001 1 原 1000 ...

為什麼要用AndroidStudio

原因一 android studio是基於intellij idea開發的,所以android studio繼承了intellij idea的所有功能.原因二 android studio是谷歌開發的,專門用於android開發的編輯器,換句話說是親兒子,谷歌會把所有好吃的好用的先給親兒子.原因三 ...