代码如下:
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。