python - 识别 float 的实际精度

标签 python decimal precision floating-accuracy

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

例如:

# 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. 

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

编辑:API 返回的准确小数位数各不相同,并不总是 8 位!

最佳答案

如果您使用的是 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() 返回的字符串表示形式,您可以计算小数点右边的位数。

关于python - 识别 float 的实际精度,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49285350/

相关文章:

c++ - 整数在 float 中的精确表示

Python在循环执行其他代码时捕获用户输入?

python - 对象作为 python 字典中的键

python - 如何应用于具有多索引列的数据框中的一组列

python - 如何对 python Decimal 进行语言环境格式化并保持其精度?

从 Oracle 数据库获取 float 时出现 Java 精度问题 - 无法正确舍入

java - 从可能为空的 Double 创建的 BigDecimal 的总和

java通过unicode_escape解码的方法

sql-server - 如何调整sql查询中的小数位

html - 对齐表格中数字的小数点,在单元格中出现伪 -"centre"对齐