首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Python 3奇异除法

Python 3奇异除法
EN

Stack Overflow用户
提问于 2013-12-28 03:35:26
回答 2查看 463关注 0票数 5

大约半个小时的思考“我做错了什么!”5行代码..。因为Python3在某种程度上舍入了大整数。任何人都知道为什么会出现这样的问题:

Python2:

代码语言:javascript
复制
int(6366805760909027985741435139224001        # This is 7**40.
    / 7) == 909543680129861140820205019889143 # 7**39

Python3:

代码语言:javascript
复制
int(6366805760909027985741435139224001 
    / 7) == 909543680129861204865300750663680 # I have no idea what this is.
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2013-12-28 07:51:58

Python 3不是“舍入大整数”。它所做的就是在除法后返回一个浮点数。因此,在Python 2中:

代码语言:javascript
复制
>>> 4/2
2

而在Python 3中:

代码语言:javascript
复制
>>> 4/2
2.0

原因很简单。在Python2中,当您使用整数时,/是整数除法,有一些令人惊讶的结果:

代码语言:javascript
复制
>>> 5/2
2

哎哟。在Python 3中,这是固定的:

代码语言:javascript
复制
>>> 5/2
2.5

这意味着在Python 3中,您的除法返回一个浮点数:

代码语言:javascript
复制
>>> 6366805760909027985741435139224001/7
9.095436801298612e+32

这个浮点数比你需要的数字精度低。然后用int()将其转换为整数,并得到一个您不期望的数字。

您应该使用整数除法(在Python 2和Python 3中):

代码语言:javascript
复制
>>> 6366805760909027985741435139224001//7
909543680129861140820205019889143L

(尾部L表示它是一个长整数,在Python 3中,长整数和普通整数被合并,因此没有尾随L)。

票数 7
EN

Stack Overflow用户

发布于 2013-12-28 03:38:07

在Python3中,/是浮点除法,所以它可能不会像对待整数一样对待参数。使用

代码语言:javascript
复制
// 

在Python 3中执行整数除法。

票数 5
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/20810729

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档