Java Double 精度問題總結


package Demo_1.Test_2;

import java.math.BigDecimal;

/**
 * @描述:Java Double 精度問題總結
 * @詳細描述:使用Java,double 進行運算時,經常出現精度丟失的問題,
 * 總是在一個正確的結果左右偏0.0000**1。 
 * 特別在實際項目中,通過一個公式校驗該值是否大於0,如果大於0我們會做一件事情,小於0我們又處理其他事情。 
 * 這樣的情況通過double計算出來的結果去和0比較大小,尤其是有小數點的時候,
 * 經常會因為精度丟失而導致程序處理流程出錯。 
 * @author BrokenColor
 * @date 2017年3月2日下午1:13:34
 */
public class DoubleTest {

    /**  
     * 對double數據進行取精度.  
     * @param value  double數據.  
     * @param scale  精度位數(保留的小數位數).  
     * @param roundingMode  精度取值方式.  
     * @return 精度計算后的數據.  
     */  
     public static double round(double value, int scale, 
     int roundingMode) {   
     BigDecimal bd = new BigDecimal(value);   
     bd = bd.setScale(scale, roundingMode);   
     double d = bd.doubleValue();   
     bd = null;   
     return d;   
     }   
    /** 
     * double 相加 
     * @param d1 
     * @param d2 
     * @return 
     */ 
     public double sum(double d1,double d2){ 
     BigDecimal bd1 = new BigDecimal(Double.toString(d1)); 
     BigDecimal bd2 = new BigDecimal(Double.toString(d2)); 
     return bd1.add(bd2).doubleValue(); 
     } 
    /** 
     * double 相減 
     * @param d1 
     * @param d2 
     * @return 
     */ 
     public double sub(double d1,double d2){ 
     BigDecimal bd1 = new BigDecimal(Double.toString(d1)); 
     BigDecimal bd2 = new BigDecimal(Double.toString(d2)); 
     return bd1.subtract(bd2).doubleValue(); 
     } 
    /** 
     * double 乘法 
     * @param d1 
     * @param d2 
     * @return 
     */ 
     public double mul(double d1,double d2){ 
     BigDecimal bd1 = new BigDecimal(Double.toString(d1)); 
     BigDecimal bd2 = new BigDecimal(Double.toString(d2)); 
     return bd1.multiply(bd2).doubleValue(); 
     } 
    /** 
     * double 除法 
     * @param d1 
     * @param d2 
     * @param scale 四舍五入 小數點位數 
     * @return 
     */ 
     public double div(double d1,double d2,int scale){ 
     //  當然在此之前,你要判斷分母是否為0,   
     //  為0你可以根據實際需求做相應的處理 
     BigDecimal bd1 = new BigDecimal(Double.toString(d1)); 
     BigDecimal bd2 = new BigDecimal(Double.toString(d2)); 
     return bd1.divide 
     (bd2,scale,BigDecimal.ROUND_HALF_UP).doubleValue(); 
     } 
}

文章出處: https://zm8.sm-tc.cn/?src=http%3A%2F%2Fzhaow-381002134.iteye.com%2Fblog%2F420369&uid=4670df527593907cf96038fceebce739&hid=27c1d93952bb3857ef74c1ccb38529f8&pos=1&cid=9&time=1461725514691&from=click&restype=1&pagetype=0000000000000408&bu=web&query=java+double+%E7%9B%B8%E5%87%8F%E7%B2%BE%E5%BA%A6&mode=&uc_param_str=dnntnwvepffrgibijbprsvpi


免責聲明!

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



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