我可以将任何字符串转换为浮点数而不丢失 Python 中的精度吗?
Can I convert any string to float without losing precision in Python?
我正在解析来自 API 的一些价格信息,如果我只做 price = float(price_str)
,我是否需要担心失去精度?
或者我是否必须使用 decimal.Decimal
来确保原始值被解析?
价格应该是小数,浮点数经常会引入舍入误差,这会让你在长运行时头疼。示例:
In [1]: 3*0.1
Out[1]: 0.30000000000000004
使用货币时使用十进制 class!
为什么?让我们看看这个虚拟示例:
float('0.2') + float('0.1')
结果:0.30000000000000004
改用十进制:
Decimal('0.2') + Decimal('0.1')
结果:Decimal('0.3')
更新:
如果你使用第三方 API 格式 json,你可以使用 Decimal 自动解析浮点数:见我的博客 post: http://www.daveoncode.com/2014/10/21/python-reading-numbers-from-json-without-loss-of-precision-using-decimal-class-for-data-processing/
我正在解析来自 API 的一些价格信息,如果我只做 price = float(price_str)
,我是否需要担心失去精度?
或者我是否必须使用 decimal.Decimal
来确保原始值被解析?
价格应该是小数,浮点数经常会引入舍入误差,这会让你在长运行时头疼。示例:
In [1]: 3*0.1
Out[1]: 0.30000000000000004
使用货币时使用十进制 class! 为什么?让我们看看这个虚拟示例:
float('0.2') + float('0.1')
结果:0.30000000000000004
改用十进制:
Decimal('0.2') + Decimal('0.1')
结果:Decimal('0.3')
更新:
如果你使用第三方 API 格式 json,你可以使用 Decimal 自动解析浮点数:见我的博客 post: http://www.daveoncode.com/2014/10/21/python-reading-numbers-from-json-without-loss-of-precision-using-decimal-class-for-data-processing/