我正在寻找一种简单的方法来查找数字中的最低有效数字(浮点或整数)。
例如:
101-->1
101.2-->0.2
1.1003-->0.0003
10、100、1000等案例的相关性稍低,尽管我无论如何都会感兴趣。
我并不特别关心格式,所以如果以更实用的方式识别结果更有意义,请放心。
例如:
101.2-->0.1或10^-1(甚至是相关幂/指数的-1)是可以的。
对于其他上下文,我试图做的是:
假设我有一个数字31.6,我希望能够将其转换为31.5(将最低有效位数减少1)。假设我有数字16,我想把它变成15(同样的想法)。如果我有数字100,我仍然想把它变成99,但我可能会计算出那里的案例处理(不指定100.0,我认为1是最低有效数字,减1等于0,这不是我想要的)。这反过来又与手动操作数据范围中的类分隔符有关(不过偏离了主题)。
展示我的家庭作业:这看起来很有希望(最小SigDigit部分),但它返回的数字没有任何(数学)参考数字的幂(我也希望避免大量的字符串转换)。
这是我搜索stackoverflow时出现的问题,但似乎没有帮助(如果我使用了错误的术语/搜索短语,我提前道歉)
如果您已经有了浮动,这将不起作用。Python浮动不携带您需要的信息。1.
和1.0
之间没有区别,如果你把1.0
和3.0
分开,你就会得到0.3333333333333333
(除了它真的是0.333333333333333314829616256247390992939472198486328125
)。
如果你的输入是字符串,你可以很容易地做到:
def least_significant_digit_power(num_string):
if '.' in num_string:
# There's a decimal point. Figure out how many digits are to the right
# of the decimal point and negate that.
return -len(num_string.partition('.')[2])
else:
# No decimal point. Count trailing zeros.
return len(num_string) - len(num_string.rstrip('0'))