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

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM