我有一个小的(Python)命令行工具,用户提供了一个浮点数,例如,
foobar 3.141
我想计算数字的粒度,即找到k
为整数的最小x * 10^k
(达到给定的容差)。请注意,该数字可能以不同的方式表示(3141.0e-3
等),因此计算.
之后的字符数不一定会削减它。
此
def get_granularity(x):
for k in range(100):
if abs(x - int(x)) < 1.0e-15 * x:
break
x *= 10
return k
有效,但我不太喜欢它,因为它假设最大k
(在这种情况下为99
)。可以邀请log10
参加聚会,但也许有更优雅的解决方案。