繁体   English   中英

查找浮点精度

[英]Find floating point accuracy

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

此信息以某种方式隐藏在“ 为什么浮点数不正确?”中。 (也许是找到小数位的简单方法 )。

使用'2.05645e+07'.index('e')似乎是一种黑客。

hacky稍少,但仍可以改进:

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

感谢@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'))

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM