[英]Find floating point accuracy
在python中,给定数字2.056e+07
和2.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.