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