1:問題場景:在金額的計算中, 會出現精度丢失的情況。
數字計算時,計算機會将數字轉換為最近似的二進制,在進行計算,這就會導緻計算結果精度不正确。
例如:0.1+0.2 =0.30000000000000004 。這個問題在衆多程式設計語言中都出現過。
2:解決辦法:這個問題在java中是使用java.math.BigDecimal進行計算。
3:常用方法:加減乘除,比較大小,是否為0,保留n為小數,向上向下,四舍五入。
A : 加減乘除
BigDecimal num= new BigDecimal ("10");
num.add(num);
num.subtract(num);
num.multiply(num);
num.divide(num);
B :比較大小,是否為0
num.compareTo(num)==1
這個方法結果有-1 ,0 ,1 分别表示小于,大于,等于
BigDecimal.ZERO 則表示0
C:保留n位小數,向上向下取整,四舍五入,當出現無限循環小數時使用
setScale的第一個參數是小數位數, 這個示例是保留2位小數, 後面是四舍五入規則.
直接移除n位:
num.setScale(n,BigDecimal.ROUND_DOWN)
進位:
num.setScale(n,BigDecimal.ROUND_UP)
四舍五入,5進位
num.setScale(n,BigDecimal.ROUND_HALP_UP)
四舍五入,5舍棄
num.setScale(n,BigDecimal.ROUND_HALP_DOWN)
D:當小數位過長出現科學計算法時,去除末尾0,方法:stripTrailingZeros() 。不顯示科學計算法 轉換string。
num.stripTrailingZeros().toString()