在python中序列化长号

时间:2011-06-17 01:35:30

标签: python

在python中序列化长数字的最佳方法是什么?

我在想泡菜,但它还在回归“缩短版”。我显然要写所有数字..

longNum = math.pow(2,1000)


f = open("file", "w")
pickle.dump(str(longNum), f)
f.close()

f = open("file","r")
longNum = pickle.load(f)
f.close()

print longNum
  

1.07150860719e + 301

2 个答案:

答案 0 :(得分:7)

如果启动解释器,您可以快速查看问题。

>>> math.pow(2,1000)
1.0715086071862673e+301

>>> 2**1000
10715086071862673209484250490600018105614048117055336074437503883703510511249361224931983788156958581275946729175531468251871452856923140435984577574698574803934567774824230985421074605062371141877954182153046474983581941267398767559165543946077062914571196477686542167660429831652624386837205668069376L

math.pow返回一个浮点数,根据定义,它不会保留“所有数字”。通过使用长整数运算符**,您的结果很长,这正是您要寻找的。

答案 1 :(得分:0)

我认为这实际上是打印格式化的问题,而不是序列化。阅读this页面,看看是否正在发生这种情况。

另外,请不要考虑gnibbler对此问题的评论。我认为这可以击中头部。