python保留小数不四舍五入_很简单的一道数学题,电脑竟然不会做!而且还屡错不改!...

很简单的一道数学题,电脑竟然不会做!

“5.4-2”与“3.4”相等吗?

电脑会很清楚、很坚定地告诉您:不相等。

您一定脸上写满了惊讶!

c756d3e3ca0eb7994360a1a5fecc69e9.png

以Python运行环境为例,证明一下:

>>> 5.4-2 == 3.4
False

这么简单的数学题电脑怎么会弄错!?还是我们自己错了?

我们一块深入排查一下,还是以Python运行环境为例:

>>> 5.4-2
3.4000000000000004

咦?怎么多出来了“0.0000000000000004”!?

难怪不相等呢!

127296dc5974c2a5a27bc398bee088d3.png

电脑出毛病了吗?别紧张,是这么回事:

我们在日常生活及大部分编程过程中,采用的都是十进制数,而计算机使用的是二进制数,往往在我们看起来很平常的十进制数,在进制转换过程中,却保不准导致了循环小数的出现,而计算机在存储及运算时,其精度或者说数据的有效位是有限的,超出其精度之外的小数会被截断、忽略,由此导致了准确度的损失。

那么,面对上述问题,我们该怎么办呢?

我们需要给计算机一定的容忍空间,尤其对浮点数进行比较时,在不影响我们实际应用所要求的精度的基础之上,取有限的有效位进行比较。还是以Python为例,我们可以调用round函数对浮点数进行四舍五入,如下所示:

>>> round((5.4-2)-3.4 ,2) == 0
True

简单解释一下,上述代码中的round函数有两个参数,第一个参数可以是一个表达式或者数字,第二个参数则表示对第一个参数的计算结果进行四舍五入后保留的小数点后的有效位数。通过“5.4-2”与“3.4”两者求差,舍弃因计算机的不精确带来的无效位、保留我们可以容忍的有效位(比如,上述代码保留小数点后2位有效数),然后再与0进行比较,就解决了上述问题。

只有彻底摸清楚了电脑的脾气、能力及缺陷,我们方能更好地驾驭、趋利避害,不会不明不白的掉到陷阱里了。

94e2afcf9bb20e9602c1a7711e7c5a30.png

原文:08.“5.4-2为什么不等于3.4?”-数据类型(一)

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值