python浮点型相乘_我居然使用浮点型和整型数据相乘造成结果出现.00000000001情况...

前言:毕业时间长,学校学的知识点也给我忘了。哎!

先看一张图:

0ca105a05f4162962d20313ebc3b5dc1.png

错误截图

图中的ECPM出现小数无限长问题。

ECPM的计算公式:(消耗/曝光)*1000。

我也知道BigDecimal可以处理高精度的数据计算。但是我却用错了方式。如图:

26ccd3d3813ec109ffcd0ca3d81ef75e.png

错误代码

其实我认为我这么写时没有问题的,口头计算下就是(4975.60/400377)*1000=12.2。然而这是我的想法,计算机不是这么想的。原因在于我们的计算机是二进制的。浮点数没有办法是用二进制进行精确表示。我们的CPU表示浮点数由两个部分组成:指数和尾数,这样的表示方法一般都会失去一定的精确度,有些浮点数运算也会产生一定的误差。如:0.5的二进制表示并非就是精确的0.5。反而最为接近的二进制表示是 0.049999999999999996。所以我错误的原因就是不应该去拿浮点型和整型相乘。那么如何解决这个问题。如图:

5ce61f535f9da3a953524afc41da5eb7.png

正确代码

把所有的计算都放在BigDecimal里面进行。

总结:

  • 开发过程中,有时可能会拿着自己十进制的想法去编写。一定要注意下计算机是二进制。
  • 做小数的加减乘除时,最好使用BigDecimal来统一处理。BigDecimal可以处理高精度的数据计算。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值