我正在从API中解析一些价格信息,如果我只是price = float(price_str)
,我是否需要担心会失去精确度?
或者我是否必须使用decimal.Decimal
来确保解析原始值?
答案 0 :(得分:6)
使用货币时使用十进制类! 为什么?让我们看看这个虚拟的例子:
float('0.2') + float('0.1')
结果:0.30000000000000004
改为使用十进制:
Decimal('0.2') + Decimal('0.1')
结果:Decimal('0.3')
<强>更新强>
如果您使用的是带有json格式的第三方API,您可以使用Decimal自动自动解析浮动数字:请参阅我的博文:http://www.daveoncode.com/2014/10/21/python-reading-numbers-from-json-without-loss-of-precision-using-decimal-class-for-data-processing/
答案 1 :(得分:3)
价格应为十进制,浮点数通常会引入舍入错误,从长远来看会让您头疼。例如:
In [1]: 3*0.1
Out[1]: 0.30000000000000004