大家在用double型计算的时候有没碰到如下问题:
   double d1=1000d;  double d2=1.017d;
   double d3=d1*d2;  d3的结果是:1016.99999999bigdecimal转换为integer
然后再把这个数据再乘以个double d4=18750d;再除以100000;
结果为:19.0687499998125 如果四舍五入保留四位小数结果为:19.0687
而真真用计算器或用系统自带的计算器算出来结果为:19.0685,这样结果相差0.0001
似乎看起来相差的不是很大,如这个结果乘以个数量可想而之会差的很大的。以下是本人专门写了个类的解决些问题,给用得着的人提供快捷的路:

import java.math.BigDecimal;

/**
 * Double的加减乘除
 * @author xuxinlong
 * E-mail: longxx888@163 这个 E-mail 地址已经被防止灌水恶意程序保护,您需要启用
Java Script 才能观看
 */
public class NumberOP {
    private BigDecimal ins;
   
    /**
     * 测试
     * @param args
     */
    public static void main(String[] args){
        System.out.println(new NumberOP(18750).mul(new NumberOP(1.017)).mul(new NumberOP(1000)).div(new NumberOP(1000000)).toDouble());
    }
   
    /**
     * NumberOP构建一个NumberOP
     * @param numberOP
     */
    public  NumberOP(NumberOP numberOP){
        this.ins = numberOP.ins;
    }
   
    /**
     *  BigDecimal构建一个NumberOP
     * @param bigDecimalValue
     */
    public  NumberOP(BigDecimal bigDecimalValue){
        this.ins = bigDecimalValue;
    }
   
   
    /**
     * String构建一个NumberOP
     * @param doubleValue
     */
    public  NumberOP(String doubleValue){
        this.ins = new BigDecimal(doubleValue);
    }

    /**
     * int构建一个NumberOP
     * @param intValue
     */
    public  NumberOP(int intValue){
        this.ins = new String(intValue));
    }
   
    /**
     * long构建一个NumberOP
     * @param longValue
     */
    public  NumberOP(long longValue){
        this.ins = new String(longValue));
    }
   
    /**
     * float构建一个NumberOP
     * @param floatValue
     */
    public  NumberOP(float floatValue){
        this.ins = new String(floatValue));
    }
   
   
   
    /**
     * double构建一个NumberOP
     * @param doubleValue
     */
    public  NumberOP(double doubleValue){
        this.ins = new String(doubleValue));
    }
   
   
   
     /**
     * 两个数相加
     * @param v1
     * @param v2
     * @return NumberOP
     */
    public NumberOP add(NumberOP v1){
       return new NumberOP(this.ins.add(v1.ins));
    }
   
   
   
    /**
     * 两个数相减
     * @param v1
     * @param v2
     * @return Double
     */
    public NumberOP sub(NumberOP v1){
        return new NumberOP(this.ins.subtract(v1.ins));
    }
   
    /**
     * 两个数相乘
     * @param v1
     * @param v2
     * @return Double
     */
    public NumberOP mul(NumberOP v1){
        return new NumberOP(this.ins.multiply(v1.ins));
    }
   
    /**
     * 两个数相除
     * @param v1
     * @param v2
     * @return Double
     */
    public NumberOP div(NumberOP v1){
        return new NumberOP(this.ins.divide(v1.ins,10,BigDecimal.ROUND_HALF_UP));
    }
   
    /**
     * 返回String的结果
     * @param numberOP
     * @return
     */
    public String toString(){
        return String();
    }
   
    /**
     * 返回double的结果
     * @param numberOP
     * @return
     */
    public double toDouble(){
        return this.ins.doubleValue();
    }
}

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。