但0-2之间的2位小数*1000不会出现错误(不能算正常吧,只能算不出错,比如你取整)。
由于没做>2的测试,所以臆测错了。
public static void main(String[] args) {
for (int i = 0; i < 10000; i++) {
double i0 = ((double) i) / 100;
if (i0 * 1000 != i * 10) {
System.out.println(i0 * 1000);
}
}
}
从0-100可以看出,出现精度丢失的还是很多的。
至于为什么0-2的2位小数*1000都没错完全是正常现象,把*10、*100、*1000、*10000都试试就知道了
有可能被人搜到,简单描述一下精度丢失:
由于2进制只能表示少部分10进制小数,大部分都除不尽(自己想想为什么),所以在表示0.07时2进制是“0.000101111...”它真正的值是“0.07000000001”,当然电脑为了方便显示还是0.7,但当你用0.07*100时,真实的计算是“0.070...1*100",最后的数值进位了自然就无法忽略了。所以涉及小数计算的都有可能错一点点。(+=*甚至/都有可能)