zoukankan      html  css  js  c++  java
  • 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

    仅做笔记,如有错误之处,望指出
  • 相关阅读:
    python 变量作用域
    python 函数与模块
    python 程序控制结构
    python zip() map() filter()
    python 迭代和列表解析
    python 字典视图
    Matlab程序设计
    Matlab 基本绘图练习 包含极坐标
    Matlab 软件绘图
    Pandas 控制输出格式和精度
  • 原文地址:https://www.cnblogs.com/brokencolor/p/6490229.html
Copyright © 2011-2022 走看看