加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程开发 > Java > 正文

java – 最少惊喜的原则[复制]

发布时间:2020-12-15 04:08:29 所属栏目:Java 来源:网络整理
导读:参见英文答案 java double precision ????????????????????????????????????2个 double d = 0.0; for (int i = 0; i 10; i++) { d = d+0.1; } System.out.println(d); 这是我在“最小惊喜原则”上阅读的一个例子 我只是好奇为什么代码会返回0.999999999,如果
参见英文答案 > java double precision ????????????????????????????????????2个

double d = 0.0;
    for (int i = 0; i < 10; i++)
    {
        d = d+0.1;
    }
    System.out.println(d);

这是我在“最小惊喜原则”上阅读的一个例子

我只是好奇为什么代码会返回0.999999999,如果我将d的数据类型更改为float,我得到1.0000001.这种行为背后的原因是什么?

解决方法

这是浮点数不精确的经典案例.由于0.1不能以二进制形式干净地表示(它是一个重复的数字),因此随着数字被反复添加到自身中,存在舍入误差.当我们更改为浮点数时,行为的差异仅归结为在更多位存储过程中实际保持0.1的差异.

如果您需要十分精确的十进制数表示,BigDecimal类将很快成为您最好的朋友.基于它如何在内部存储小数的细节而不会损失精度,计算可以保持其完整性.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读