double精度丟失的原因?
發生精度丟失的原因:
個人理解:機器在運行時,使用2進制形式的計數方式,而我們日常生活中的計算是10進制的,對于整數的加減乘除,double還能適用,但是對于有小數的,則容易發生精度丟失,即用2進制表示10進制小數時,部分小數只是近似的表示,2進制表示不完全準確,此時,只能用BigDecimal來進行精確的精度計算。
double d1=5.0;
double d2=4.9;
BigDeciaml b1=new BigDeciaml(d1);
BigDecimal b2=new BigDecimal(d2);
加法運算:
double sum=b1.add(b2).doubleValue();
減法運算:
double sub=b1.subtract(b2).doubleValue();
乘法運算:
double mul=b1.multiply(b2).doubleValue();
除法運算:
//scale表示指定保留幾位小數,若發生除不盡的情況,則按四舍五入來保留小數
double div=b1.divide(b2,scale,BigDecimal.ROUND_HALF_UP).doubleValue();
只保留小數位數的兩種方法:
1)double num1=b1.divide(1,scale,BigDecimal.ROUND_HALF_UP).doubleValue();
2)BigDecimal bg=new BigDecimal(d1);
double num2=bg.setScale(scale,BigDecimal.ROUND_HALF_UP).douleValue();
3)DecimalFormat bg=new DecimalFormat("###0.00");
double num3=bg.format(d1);
4)String num4=String.format("%.2f",d1);//與C語言的打印輸出類似
String num5=String.format("%.2f,%.3f,%.3f",d1,d1,d3);
注意:doubleValue() 將此BigDecimal 轉換為 double