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类将很快成为您最好的朋友.基于它如何在内部存储小数的细节而不会损失精度,计算可以保持其完整性. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |