解决java Double运算精度丢失问题 |
您所在的位置:网站首页 › double计算精度问题 › 解决java Double运算精度丢失问题 |
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 |