我尝试计算x =(2 ** 83 +1)/ 3,这在数学上是整数,并且是python-x中的浮点数。 在python 2中,我得到:
x = 2**83 + 1
x = 9671406556917033397649409L
然后
y = x/3 = 3223802185639011132549803L
在python 3中,我得到了:
x = 2**83 + 1
x = 9671406556917033397649409 --> OK
然后
y = x/3 = 3.223802185639011e+24
要比较2个结果,我在python 3中使用了格式字符串指令:
z = '%25d' % y
,我得到z = '3223802185639010953592832'
和z = '3223802185639011132549803'
在python 2中。
(%i给出相同的结果,非常正常)。
奇怪的是,当我计算3 * Z时,我在python2中得到了很好的结果,而在python3中得到了一个错误的结果。
我看不到测试的问题所在(计算,格式化等等)。
我想使用python 3并显示x = (2**83 + 1)/3
而不显示'e+24'
,但显示所有数字。
有人有主意吗?
我必须补充一点,在python2中使用/或//时,问题仍然相同。从数学上来说,我们得到的结果是整数。我应该说问题出在python 3上,我怎么能得到好的结果(python 3中(2 ** 83 +1)/ 3的整体显示)?
答案 0 :(得分:0)
您似乎正在寻找整数除法而不是浮点数。
/
运算符在Python3中返回浮点数。要在Python3中执行整数除法,请使用//
。
所以,我想您所需要的只是
(2**83 + 1)//3
给出
3223802185639011132549803
代替(2**83 + 1)/3
。
在Python2.7中,/
和//
实际上是相同的,除非您执行类似from __future__ import division
的操作。