查找浮点精度

2024-04-19 17:51:13 发布

您现在位置:Python中文网/ 问答频道 /正文

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

这些信息以某种方式隐藏在Why Are Floating Point Numbers Inaccurate?(也可能是Easy way of finding decimal places)中。你知道吗

使用'2.05645e+07'.index('e')似乎是一种黑客行为。你知道吗


Tags: of数据目的信息easy方式数字are
1条回答
网友
1楼 · 发布于 2024-04-19 17:51:13

稍微不那么老套,但还是可以改进的:

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'))

相关问题 更多 >