java中33168.02乘以100会出现误差

public static void main(String[] args) {
double a=33000.02;
System.out.println(a);  
System.out.println(a*100);
long b=(long) (a*100);
System.out.println(b);
}
以上是代码,以下是输出结果

求问这是为什么啊?难道是JAVA的内部缺陷么?
还有应该如何解决这一问题?
PS:除了这个数,33***.02类型的数都会这个问题,而且还有其他类似.02的数也会,然而.01 .03 .04等等其他的形式的数都是可以正常的
收起

这是因为;用double,float这类基本类型就会出现这种误差,如果要精确的值,可以考虑用BigDecimal类型来计算。

import java.math.BigDecimal;

public class TestBigDecimal {

/**
* @param args
*/
public static void main(String[] args) {
BigDecimal b = new BigDecimal("33000.02");
BigDecimal r = b.multiply(new BigDecimal("100"));

System.out.println(r.doubleValue());
System.out.println(r.toPlainString());

}

}

posted @ 2018-06-16 14:46  舞羊  阅读(1162)  评论(0编辑  收藏  举报