提问人:Zak Stucke 提问时间:3/15/2018 最后编辑:ndmeiriZak Stucke 更新时间:7/18/2018 访问量:139
识别浮点数的实际精度
Identify actual precision of a float
问:
我正在与返回浮点数的 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 位!
答:
6赞
ndmeiri
3/15/2018
#1
如果您使用的是 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()
评论
1赞
Zak Stucke
3/15/2018
谢谢我不知道 repr 的存在,这对我来说真的很有用。:)
下一个:将十进制型数字精确转换为字符串型
评论
round()
到小数点后 8 位?repr
float
float