在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)來得到原始值。