我可以将任何字符串转换为float而不会在Python中丢失精度吗?

时间:2015-07-07 09:06:37

标签: python floating-point

我正在从API中解析一些价格信息,如果我只是price = float(price_str),我是否需要担心会失去精确度?

或者我是否必须使用decimal.Decimal来确保解析原始值?

2 个答案:

答案 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