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,怎么都能用二进制精确表示
你自己用二进制表示下其中任意一个就知道了