解决java Double运算精度丢失问题

您所在的位置:网站首页 double计算精度问题 解决java Double运算精度丢失问题

解决java Double运算精度丢失问题

#解决java Double运算精度丢失问题| 来源: 网络整理| 查看: 265

1,演示精度丢失问题

测试以下代码

System.out.println(6.6d + 1.3d); System.out.println(1.2d - 1d);

输出结果为

 

发现其结果不准确。

解决方法:

建议重新创建一个名为math的类,这个类存放平时需要用的数学方法。

代码演示如下:

/** * 解决java双精度计算丢失精度问题 * 加法 * @param a * @param b * @return */ public double add(double a,double b) { BigDecimal b1 = new BigDecimal(Double.toString(a)); BigDecimal b2 = new BigDecimal(Double.toString(b)); return b1.add(b2).doubleValue(); } // 减法 A - B /** *mul(a,b) 大致为 a - b; * @param a 减数 * @param b 被减数 * @return a - b */ public double sub(double a,double b) { BigDecimal b1 = new BigDecimal(Double.toString(a)); BigDecimal b2 = new BigDecimal(Double.toString(b)); return b1.subtract(b2).doubleValue(); } /** * 乘法 * @param a * @param b * @return */ public double mul(double a,double b) { BigDecimal b1 = new BigDecimal(Double.toString(a)); BigDecimal b2 = new BigDecimal(Double.toString(b)); return b1.multiply(b2).doubleValue(); } /** * 除法, * @param a 除数 * @param b 被除数 * @param scale 小数点位数 * @return a/b 结果保留 scale位小数 */ public double div(double a,double b,int scale) { BigDecimal b1 = new BigDecimal(Double.toString(a)); BigDecimal b2 = new BigDecimal(Double.toString(b)); return b1.divide(b2, scale,BigDecimal.ROUND_HALF_UP).doubleValue(); }

注意除法中scale表示保留几位小数。 

需要使用的时候直接在main函数调用就是了,演示如下:

public static void main(String[] args) { math m = new math(); double d1 = 123.4d; double d2 = 12.4d; //加法 System.out.println(m.add(d1, d2)); //减法 System.out.println(m.sub(d1,d2)); //乘法 System.out.println(m.mul(d1, d2)); //除法 括号内第三个表示保留几位小数 System.out.println(m.div(d1, d2, 4)); }

声明math需要导包;



【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3