double 精度问题

来源:互联网 发布:阿尔法软件注册机 编辑:程序博客网 时间:2024/05/01 01:10
使用Java,double 进行运算时,经常出现精度丢失的问题,总是在一个正确的结果左右偏0.0000**1。 特别在实际项目中,通过一个公式校验该值是否大于0,如果大于0我们会做一件事情,小于0我们又处理其他事情。 这样的情况通过double计算出来的结果去和0比较大小,尤其是有小数点的时候,经常会因为精度丢失而导致程序处理流程出错。 所以一般对double类型进行运算时,做好对结果进行处理,然后拿这个值去做其他事情。 
 
/** * 对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();}


 

原创粉丝点击