double类型加整数结果不精准问题

偶尔会出现一些小误差,希望熟悉源代码的大神讲解一下

 int n = 0;
        while (n<10){
            n++;
            Random random = new Random();
            double d = random.nextInt(1000);
            d = d/100;
            System.out.print(d+"||");
            d += 1;
            System.out.println(d);
        }

结果,如第一行所示
图片说明

4个回答

解决方案就是使用整形数组做高精度的运算,或者转化为整形先运算,运算完后在转化,
由于浮点型在运算的结果是用二进制表示的 最接近的数,,所以有误差,,而且无法移除误差,例如无限循环的数1.666666666666666666666666
到了后面超出精度范围,就会表示为一个最接近的二进制数;

.....你不是有个d+=1么? d = d+1,结果不就是只有吗?

因为在运算过程中整数会被转化为DOUBLE类型, 例如1 可能会被转化成为 1.00001 然后就有可能出问题了

这个是系统运算导致的,你应该没有办法修改吧,你可以把d的每一位都记录下来,然后在对应整数位上+1

Csdn user default icon
上传中...
上传图片
插入图片
抄袭、复制答案,以达到刷声望分或其他目的的行为,在CSDN问答是严格禁止的,一经发现立刻封号。是时候展现真正的技术了!
立即提问
相关内容推荐