大伙,Eclipse这是bug了吗

img


当半径是3的时候这个圆的面积怎么这么离谱啊
我又在另一个程序的末尾加了几行验证,结果是一样离谱啊

img

这很正常.浮点数运算小数都有误差
参考

原因在于我们的计算机是二进制的。浮点数没有办法用二进制进行精确表示。
我们的CPU表示浮点数由两个部分组成:指数和尾数,这样的表示方法一般都会失去一定的精确度,有些浮点数运算也会产生一定的误差。
比如 double是8字节64位存储空间分配了52位来存储浮点数的有效数字,11位存储指数,1位存储正负号,即这是一种二进制版的科学计数法格式。虽然52位有效数字看起来很多,但麻烦之处在于,二进制小数在表示有理数时极易遇到无限循环的问题。
其中很多在十进制小数中是有限的,比如十进制的 1/10,在十进制中可以简单写为 0.1 ,
但在二进制中,他得写成:0.0001100110011001100110011001100110011001100110011001…..(后面全是 1001 循环)。
因为浮点数只有52位有效数字,从第53位开始,就舍入了。这样就造成了”浮点数精度损失“问题。
舍入(round)的规则为“0 舍 1 入”,所以有时候会稍大一点有时候会稍小一点。

如有帮助,请点击我的回答下方的【采纳该答案】按钮帮忙采纳下,谢谢!

img


,

了解一下bigdecimal

很正常,计算机是用二进制来存储一个数的,当你的小数部分无法用二进制精确表示的时候,就会出现你上面的问题。想要得到精确答案,可以使用BigDecimal来做运算

您好,我是有问必答小助手,您的问题已经有小伙伴帮您解答,感谢您对有问必答的支持与关注!
PS:问答VIP年卡 【限时加赠:IT技术图书免费领】,了解详情>>> https://vip.csdn.net/askvip?utm_source=1146287632