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

sat*_*oru 2 python floating-point

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

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

dav*_*ode 6

使用货币时使用十进制类!为什么?让我们看看这个虚拟的例子:

float('0.2') + float('0.1')
Run Code Online (Sandbox Code Playgroud)

结果: 0.30000000000000004

用十进制代替:

Decimal('0.2') + Decimal('0.1')
Run Code Online (Sandbox Code Playgroud)

结果: Decimal('0.3')

更新:

如果您使用的是带有json格式的第三方API,您可以使用Decimal自动自动解析浮点数:请参阅我的博客文章:http://www.daveoncode.com/2014/10/21/python-reading-numbers-from -json-而不-失精密使用小数级换数据处理/