在python中,给定数字2.056e+07
和2.05645e+07
,您如何找到每个数字的有效数字?也就是说,尾数的长度。目的是比较数据输入的数字,只选择信息最多的数字。
此信息以某种方式隐藏在Why Are Floating Point Numbers Inaccurate?(也许是Easy way of finding decimal places)。
使用'2.05645e+07'.index('e')
似乎就是这样的黑客攻击。
答案 0 :(得分:0)
稍微不那么强硬,但仍然可以改善:
len(''.join([str(x) for x in Decimal(2.05645e+07).as_tuple().digits]).rstrip('0'))
更具可读性
from types import StringType
def mantissa_length(string):
'''>>> mantissa_length("2.05645e+07")
6
>>> mantissa_length("2.05645e+01")
6'''
assert type(string) is StringType, "this function fails for float values"
digits = Decimal(string).as_tuple().digits
return len(''.join([str(x) for x in digits]).rstrip('0'))