在Windows上打包Python腳本時遇到一個需求,將浮點數轉成字符數組,比如輸入1.001,得到[‘1′,’0′,’0′,’1’]。
一開始想當然地用了:
version = 2.001
v = list(str(int(version * 1000)))
發現好像哪裡不對,得到的v是[‘1’, ‘0’, ‘0’, ‘0’]。想了一想應該是浮點數的精度問題,因為一看version * 1000 = 1000.9999999999999。
所以有這麼幾種解決方法:
v = list(str(int(round(version * 1000))))
或者:
v = list(str(version).replace(“,”, “”) + “000”)[:4]
或者用decimal模塊,decimal是固定小數點位數的,用的是十進制乘除法,所以(在設定的位數內)不會產生誤差:
from decimal import getcontext, Decimal
getcontext().prec = 4
v = list(str(Decimal(version) * 1000))
需要注意的是decimal會自動轉換科學計數法,可以用”%d” % Decimal(d)來得到原始值。