2011-06-17 40 views
-1

在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

+0

不相關,但你知道你可以寫'2 ** 1000'而不是'math.pow(2,1000)',對不對? – 2011-06-17 01:37:19

+3

math.pow返回一個浮點數。在對它進行序列化之前,精度已經丟失 – 2011-06-17 01:39:19

+0

對不起,是的,問題來自數學模塊失去精度,謝謝! – 2011-06-17 01:41:07

回答

7

如果您啓動解釋器,則可以快速查看問題。

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

>>> 2**1000 
10715086071862673209484250490600018105614048117055336074437503883703510511249361224931983788156958581275946729175531468251871452856923140435984577574698574803934567774824230985421074605062371141877954182153046474983581941267398767559165543946077062914571196477686542167660429831652624386837205668069376L 

math.pow正在返回一個浮點數,根據定義,浮點數並不保留「所有數字」。通過使用長整數運算符**,您的結果很長,這就是您要查找的結果。

0

我覺得這其實是打印的格式,而不是序列化的問題。閱讀this頁面,看看是否是這樣。

另外,不要考慮gnibbler對這個問題的評論。我認爲這碰到了頭部。