当前位置: 代码迷 >> J2SE >> double类型的运算有关问题
  详细解决方案

double类型的运算有关问题

热度:75   发布时间:2016-04-23 19:38:12.0
double类型的运算问题
本帖最后由 ousisuiguo 于 2015-10-24 17:27:34 编辑
public static void main(String[] args){
double a=4.2;
double b=1.9;
double c=0.6;
double d=a+b+c;
double e=(10*a+10*b+10*c)/10;
System.out.println(d);
System.out.println(e);
}


为什么d的结果是6.699999999999999
而e才是我想要的6.7
------解决思路----------------------
精度问题,可以使用大数值BigInteger  BigDecimal

 public static void main(String[] args) {
     BigDecimal a=BigDecimal.valueOf(4.2);
     BigDecimal b=BigDecimal.valueOf(1.9);
     BigDecimal c=BigDecimal.valueOf(0.6);
     BigDecimal d=a.add(b).add(c);
     BigDecimal e=a.multiply(BigDecimal.valueOf(10)).
     add(b.multiply(BigDecimal.valueOf(10))).
     add(c.multiply(BigDecimal.valueOf(10))).
     divide(BigDecimal.valueOf(10));
        System.out.println(d);
        System.out.println(e);
}

------解决思路----------------------
带小数点的double都不能在计算机中用二进制精确表示(1/(2^n)除外)
而不带小数的double其实就是long,怎么都能用二进制精确表示
你自己用二进制表示下其中任意一个就知道了
  相关解决方案