【发布时间】:2018-03-14 18:35:05
【问题描述】:
我正在与返回浮点数的 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 位?一旦我这样做了,我就可以用“真”值而不是不准确的浮点数来初始化 decimal.Decimal 实例。
编辑:API 返回的准确小数位数各不相同,并不总是 8!
【问题讨论】:
-
round()到小数点后 8 位? -
重点是我不知道浮点响应的实际精度,我首先需要一些方法来计算它是 8 位小数(或任何其他精度)。谢谢
-
是否可以在该 API 中输入无理数或重复数?这些示例也都有 0(实际上是“0.0”)作为它们的第一个数字 - 总是这样吗?
-
这里的常用方法 - Python
repr使用的 - 是用最少的数字打印,再次解析,返回完全相同的float值。这通常会产生合理的结果,但请记住,没有“真正的”方法可以找出“API 的真正含义”——它实际上可能意味着 0.0194360600000000015297185740,而您无法知道,因为它们实际上是相同的float值。 -
usr2564301 我不这么认为,很确定所有内容都四舍五入到一定的小数位。
标签: python decimal precision floating-accuracy