一般貨幣計算的時候都要用到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開發的編輯器,換句話說是親兒子,谷歌會把所有好吃的好用的先給親兒子.原因三 ...