ine*_*xxt 4 python largenumber rounding integer-division python-3.x
大约半个小时想"我做错了什么!?" 在5行代码..因为Python3以某种方式舍入大整数.任何人都知道为什么会出现这样的问题:
Python2:
int(6366805760909027985741435139224001 # This is 7**40.
/ 7) == 909543680129861140820205019889143 # 7**39
Run Code Online (Sandbox Code Playgroud)
Python3:
int(6366805760909027985741435139224001
/ 7) == 909543680129861204865300750663680 # I have no idea what this is.
Run Code Online (Sandbox Code Playgroud)
在Python 3中/是浮点除法,所以它可能不会像整数一样对待你的参数.使用
//
Run Code Online (Sandbox Code Playgroud)
在Python 3中进行整数除法.
Python 3不是"四舍五入".它的作用是它会在分裂后返回一个浮点数.因此,在Python 2中:
>>> 4/2
2
Run Code Online (Sandbox Code Playgroud)
在Python 3中:
>>> 4/2
2.0
Run Code Online (Sandbox Code Playgroud)
这样做的原因是简单的.在Python 2中,/使用整数时进行整数除法会产生一些令人惊讶的结果:
>>> 5/2
2
Run Code Online (Sandbox Code Playgroud)
糟糕!在Python 3中,这是固定的:
>>> 5/2
2.5
Run Code Online (Sandbox Code Playgroud)
这意味着在Python 3中,您的部门返回一个浮点数:
>>> 6366805760909027985741435139224001/7
9.095436801298612e+32
Run Code Online (Sandbox Code Playgroud)
此浮点数的精度低于您需要的数字.然后你将它转换为一个整数int(),你得到一个你不期望的数字.
您应该使用整数除法(在Python 2和Python 3中):
>>> 6366805760909027985741435139224001//7
909543680129861140820205019889143L
Run Code Online (Sandbox Code Playgroud)
(尾随L表示它是一个长整数,在Python 3中,长整数和普通整数合并,因此没有尾随L).
| 归档时间: |
|
| 查看次数: |
271 次 |
| 最近记录: |