当前位置: 代码迷 >> J2SE >> 关于Double跟Float的疑问
  详细解决方案

关于Double跟Float的疑问

热度:28   发布时间:2016-04-23 20:32:18.0
关于Double和Float的疑问
代码如下:

double maxValue = 0.004d;
while (maxValue < 1.0) {
maxValue = maxValue * 10;
System.out.println(maxValue);
}



float maxValue = 0.004f;
while (maxValue < 1.0) {
maxValue = maxValue * 10;
System.out.println(maxValue);
}


编译环境:JDK1.7
疑问:为什么第二段代码的输出结果会有误差,而第一段的代码是正常的
------解决方案--------------------
原因就是在Java中小数无法用二进制精确表示。就像十进制无法精确表示1/3是一个道理。
说白了在Java中什么乱七八糟的计算你如果想要精确值,就不要用float/double,要用BigDecimal/BigInteger。
  相关解决方案