细说python中的round()方法

本篇文章,想聊一下Python中的round()方法。
这时候,有人就会说,round()方法嘛!简单!round() 方法就是返回浮点数x的四舍五入值。

你看下面这些例子:

round(100.123,1)
round(-100.1)
round(80.23456,3)
round(1.75,1)

上面的运行结果:

100.1
-100
80.235
1.8

一切正常,返回浮点数的四舍五入呀。
那么你再看下面的例子:

round(1.25,1)
round(1.65,1)

运行结果:

1.2
1.6

大家可以试试看!!
嗯??为啥不是1.3和1.7嘞?不是四舍五入的吗?且听我分析~~

在python2中,round()方法确实是 “四舍” ,却不是 “五入”。如果两端一样远,也就是碰到 “5” 时,则保留距离0远的一边。大于 “5” 的数,才 “入”。
而在python3中,round()方法也是 “四舍”,如果两端一样远,会保留到偶数一边。大于 “5” 的数才“入”。这也就是为什么上面的例子是1.2和1.6了。(本人在Python3中运行的)
原来如此,round()方法还分情况讨论的呀
这就完了吗?并没有!再看下面的例子:

round(2.675,2)

运行结果:

2.67

到这儿,小伙伴们就纳闷了,为啥?
无论在Python2中还是Python3中,得到的结果都应该是 “2.68”,可这里的结果为什么是 “2.67”?
莫慌~~
在机器中浮点数不一定能精确表达,机器做出了截断处理。那么在机器中保存的2.675这个数字就比实际数字要小那么一点点。这一点点就导致了它离2.67要更近一点点,所以保留两位小数时就近似到了2.67。
不好理解?看下图:
Decimal类型可以非常精确地在计算机中存储,我们导入该模块,查看“2.675”

在存储时,确实小那么一点点,所以保留两位小数时,成了“2.67”。
总结
看来,round()方法并不只是简单的四舍五入,不仅要分Python2和Python3讨论,还要看数字在计算机中的存储!!确实值得好好研究。

  • 5
    点赞
  • 18
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值