确定浮动的实际精度

时间:2018-03-14 18:35:06

标签: python decimal precision floating-accuracy

我正在与返回浮点数的API进行交互。我正在尝试计算API创建这些浮点数的小数位数。

例如:

# API returns the following floats.
>> 0.0194360600000000015297185740.....
>> 0.0193793800000000016048318230.....
>> 0.0193793699999999999294963970.....

# Quite clearly these are supposed to represent:
>> 0.01943606
>> 0.01937938
>> 0.01937937

# And are therefore ACTUALLY accurate to only 8 decimal places. 

如何确定浮点数实际上精确到小数点后8位?一旦我这样做,我可以使用“true”值而不是不准确的浮点数初始化decimal.Decimal实例。

编辑:API返回的精确小数位数会有所不同,并不总是8!

1 个答案:

答案 0 :(得分:6)

如果您使用的是Python 2.7或Python 3.1+,请考虑使用repr()内置。

以下是Python 3.6解释器中示例的工作原理。

>>> repr(0.0194360600000000015297185740)
'0.01943606'
>>> repr(0.0193793800000000016048318230)
'0.01937938'
>>> repr(0.0193793699999999999294963970)
'0.01937937'

这是有效的,因为repr()显示了仍然满足n的数字float(repr(n)) == n最小精度。

鉴于repr()返回的字符串表示,您可以计算小数点右侧的位数。