某次double强转int时精度损失的情况以及原因分析

今日写了一段代码,把双精度浮点型强制转型成整形,发现所得结与预测不符。

结果如下:


既然4.14*100=414,为什么把强转之后得到的结果却是413呢?

我们不如做个实验,测试一下原因。

实验如下:


测试发现414-(a*100)并不完全等于0,实际上有一定的误差。

由f = (414-(a*100)) = 0.000000000和g = ((a*100)-414) = -0.000000000,可以推断,a*100的值实际是小于414的。

我的分析:计算机并不能用double型中的64bit的0和1精确的表示出4.14,所以4.14只是一个近似值(也许是4.1399999...)

因此a*100实际的值可能是319.99999...(十分接近414,结果被输出时舍入成414了),导致最后强制转型成整型的时候413.99999...被舍入到413。


假若有不对的地方,恳请指出!

期待看到大家更好的解释!!

  • 4
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值