前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >一日一技:Python里面的//并不是做了除法以后取整

一日一技:Python里面的//并不是做了除法以后取整

作者头像
青南
发布2019-07-18 17:35:38
8290
发布2019-07-18 17:35:38
举报
文章被收录于专栏:未闻Code未闻Code

在Python 3里面,我们做除法的时候会遇到 a/ba//b两种写法:

代码语言:javascript
复制
>>> 10 / 3
3.3333333333333335
>>> 10 // 3
3

于是可能有人会认为, a//b相当于 int(a/b)

但如果再进一步测试,你会发现:

代码语言:javascript
复制
>>> int(-10/3)
-3
>>> -10 // 3
-4

看到这里,可能有人意识到, //似乎是向下取整的意思,例如 -3.33向下取整是 -4

那么我们再试一试向下取整:

代码语言:javascript
复制
>>> import math
>>> math.floor(-10/3)
-4
>>> -10//3
-4

看起来已经是这么一回事了。但是如果你把其中一个数字换成浮点数,就会发现事情并没有这么简单:

代码语言:javascript
复制
import math
>>> math.floor(-10/3.0)
-4
>>> -10//3.0
-4.0

当有一个数为浮点数的时候, //的结果也是浮点数,但是 math.floor的结果是整数。

这个原因可以参看Python PEP-238的规范:ttps://www.python.org/dev/peps/pep-0238/#semantics-of-floor-division

except that the result type will be the common type into which a and b are coerced before the operation. Specifically, if a and b are of the same type, a//b will be of that type too. If the inputs are of different types, they are first coerced to a common type using the same rules used for all other arithmetic operators.

结果的类型将会是 ab的公共类型。如果 a是整数, b是浮点数,那么首先他们会被转换为公共类型,也就是浮点数(因为整数转成浮点数不过是末尾加上 .0,不会丢失信息,但是浮点数转换为整数,可能会把小数部分丢失。所以整数何浮点数的公共类型为浮点数),然后两个浮点数做 //以后的结果还是浮点数。

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2019-07-16,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 未闻Code 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档