1. 程式人生 > >關於精度問題(BigDecimalUtil工具類)

關於精度問題(BigDecimalUtil工具類)

關於精度問題

這樣寫會丟失精度

Java在java.math包中提供的API類BigDecimal,用來對超過16位有效位的數進行精確的運算。雙精度浮點型變數double可以處理16位有效數。

對比可知,test2仍然會出現精度問題,而在建立BigDecimal物件時,引數為字串就不會出現精度問題

BigDecimalUtil工具類   --解決精度問題public class BigDecimalUtil {     //防止工具類在外部例項化private BigDecimalUtil(){    }     public static BigDecimal add(

double v1, double v2){        BigDecimal b1 = new BigDecimal(Double.toString(v1));        BigDecimal b2 = new BigDecimal(Double.toString(v2));         return b1.add(b2);    }     public static BigDecimal sub(double v1,double v2){        BigDecimal b1 = new BigDecimal(Double.toString(v1));        BigDecimal b2 =
new BigDecimal(Double.toString(v2));         return b1.subtract(b2);    }     public static BigDecimal mul(double v1,double v2){        BigDecimal b1 = new BigDecimal(Double.toString(v1));        BigDecimal b2 = new BigDecimal(Double.toString(v2));         return b1.multiply(b2);    }     public static
BigDecimal div(double v1,double v2){        BigDecimal b1 = new BigDecimal(Double.toString(v1));        BigDecimal b2 = new BigDecimal(Double.toString(v2));         return b1.divide(b2,2,BigDecimal.ROUND_HALF_UP);//四捨五入,保留2位小數}}

注意:使用該工具類時,除數不能為0