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等等其他的形式的数都是可以正常的
收起
  • java中33168.02乘以100会出现误差

这是因为;用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());

}

}

相关文章:

  • 2021-05-20
  • 2022-12-23
  • 2022-12-23
  • 2022-01-08
  • 2022-12-23
  • 2021-12-23
  • 2022-12-23
  • 2021-11-29
猜你喜欢
  • 2022-12-23
  • 2022-12-23
  • 2021-12-04
  • 2022-12-23
  • 2021-12-17
  • 2021-12-07
相关资源
相似解决方案