找到浮点精度

时间:2017-05-11 10:07:30

标签: python floating-point

在python中,给定数字2.056e+072.05645e+07,您如何找到每个数字的有效数字?也就是说,尾数的长度。目的是比较数据输入的数字,只选择信息最多的数字。

此信息以某种方式隐藏在Why Are Floating Point Numbers Inaccurate?(也许是Easy way of finding decimal places)。

使用'2.05645e+07'.index('e')似乎就是这样的黑客攻击。

1 个答案:

答案 0 :(得分:0)

稍微不那么强硬,但仍然可以改善:

len(''.join([str(x) for x in Decimal(2.05645e+07).as_tuple().digits]).rstrip('0'))

使用支票thanks to @Mark Dickinson

更具可读性
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'))