Python是否错误地处理了这个问题;任意精度整数;?

Python是否错误地处理了这个问题;任意精度整数;?,python,arbitrary-precision,Python,Arbitrary Precision,根据中的答案,Python应该具有“任意精度整数”。但这一结果显然不是任意精度: $ python -c 'print("%d" % (999999999999999999999999/3))' 333333333333333327740928 根据bignum是任意大的(不仅仅是C的long类型的大小)。并且说Python的bignum是任意精度的 那么,为什么上面这行代码的结果不正确呢?实际上,在python3中,每当你对int进行除法时,结果就是float。有一个执行整数除法的/运算符:

根据中的答案,Python应该具有“任意精度整数”。但这一结果显然不是任意精度:

$ python -c 'print("%d" % (999999999999999999999999/3))'
333333333333333327740928
根据bignum是任意大的(不仅仅是C的
long
类型的大小)。并且说Python的
bignum
是任意精度的


那么,为什么上面这行代码的结果不正确呢?

实际上,在python3中,每当你对int进行除法时,结果就是float。有一个执行整数除法的
/
运算符:

 >>> 999999999999999999999999/3
 3.333333333333333e+23
 >>> 999999999999999999999999//3
 333333333333333333333333

 >>> type(999999999999999999999999/3)
 <class 'float'>
 >>> type(999999999999999999999999//3)
 <class 'int'>
如何编写与python 2.2+和3.3兼容的代码 这其实很简单,只需添加:

 >>> from __future__ import division 
这将在2.2+代码中启用3.X除法

>>> from sys import version 
>>> version
'2.7.6 (default, Dec 30 2013, 14:37:40) \n[GCC 4.8.2]'
>>> from __future__ import division 
>>> type(999999999999999999999999//3)
<type 'long'>
>>> type(999999999999999999999999/3)
<type 'float'>
来自sys导入版本的
>>
>>>版本
“2.7.6(默认,2013年12月30日14:37:40)\n[GCC 4.8.2]”
>>>来自未来进口部
>>>类型(9999999999999999999999//3)
>>>类型(9999999999999999999999/3)

在我的框中,它按预期工作,即使通过增加9'sWell的数量,问题似乎只出现在Python3上,
print
语句Python确实有任意精度的整数。您的代码创建的数字不是整数。只需
python3-c“打印(99999999999999999999999999999/3)”
即可立即显示问题(它打印的是浮点而不是整数)。这会提供正确的任意精度输出:$python-c“打印”(%d“%(999999999999999999999999999//3))“333333333请注意,
/
操作符自(我相信是在2001年左右发布的)起就可以使用了。所以这不是python3的功能。@Bakuriu我想他的意思是,在python2中,假设两个整数之间的
/
,而在python3中,你需要显式调用它。@SethMMorton是的,但从答案上看不太清楚。有人可能会认为,由于python2中的行为不同,因此没有
/
操作符。如果有人想编写与这两个版本兼容的代码,这会增加一点复杂性。我只是想澄清一下,使用
/
不会在这个意义上带来任何问题。
>>> from sys import version 
>>> version
'2.7.6 (default, Dec 30 2013, 14:37:40) \n[GCC 4.8.2]'
>>> from __future__ import division 
>>> type(999999999999999999999999//3)
<type 'long'>
>>> type(999999999999999999999999/3)
<type 'float'>