大约半个小时的思考“我做错了什么!”5行代码..。因为Python3在某种程度上舍入了大整数。任何人都知道为什么会出现这样的问题:
Python2:
int(6366805760909027985741435139224001 # This is 7**40.
/ 7) == 909543680129861140820205019889143 # 7**39Python3:
int(6366805760909027985741435139224001
/ 7) == 909543680129861204865300750663680 # I have no idea what this is.发布于 2013-12-28 07:51:58
Python 3不是“舍入大整数”。它所做的就是在除法后返回一个浮点数。因此,在Python 2中:
>>> 4/2
2而在Python 3中:
>>> 4/2
2.0原因很简单。在Python2中,当您使用整数时,/是整数除法,有一些令人惊讶的结果:
>>> 5/2
2哎哟。在Python 3中,这是固定的:
>>> 5/2
2.5这意味着在Python 3中,您的除法返回一个浮点数:
>>> 6366805760909027985741435139224001/7
9.095436801298612e+32这个浮点数比你需要的数字精度低。然后用int()将其转换为整数,并得到一个您不期望的数字。
您应该使用整数除法(在Python 2和Python 3中):
>>> 6366805760909027985741435139224001//7
909543680129861140820205019889143L(尾部L表示它是一个长整数,在Python 3中,长整数和普通整数被合并,因此没有尾随L)。
发布于 2013-12-28 03:38:07
在Python3中,/是浮点除法,所以它可能不会像对待整数一样对待参数。使用
// 在Python 3中执行整数除法。
https://stackoverflow.com/questions/20810729
复制相似问题