平常用 python 印出浮點數時,通常是使用 "%f" 的方式印出來,

最近才發現這樣似乎會有精準度的問題...

 

舉例來說,假設我們將變數 a 宣告成 0.1234567890123456789012345,

可以發現它只儲存了小數點後 17 位:

>>> a = 0.1234567890123456789012345
>>> a
0.12345678901234568

 

用 %f, %s, 和 %e 都沒辦法完整印出這個浮點數的值:

>>> print "%f" % a
0.123457

>>> print "%s" % a
0.123456789012

>>> print "%e" % a
1.234568e-01

 

找了一下,要完整保留這個值的方法是用 repr(),

而要將這個 repr 字串還原的方式則是 float():

>>> repr(a)
'0.12345678901234568'

>>> float(repr(a))
0.12345678901234568

 

stackoverflow: Converting a Python Float to a String without losing precision

 

文章標籤
創作者介紹

亂打一通的心情日記

ephrain 發表在 痞客邦 PIXNET 留言(0) 人氣()