我正在寻找一种简单的方法来查找数字( float 或整数)中的最低有效数字。
例如:
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,这不是我想要的是)。这又与手动操作数据范围内的分类间隔有关(虽然偏离主题)。
显示我的作业: This looks promising (leastSigDigit 部分),但它返回的数字没有任何(数学)引用数字的幂(我也希望避免大量的字符串转换)。
这是我在 searched stackoverflow 时想到的但似乎没有帮助(如果我使用了错误的术语/搜索短语我提前道歉)
请您参考如下方法:
如果您已经有花车,这将不起作用。 Python float 不携带您需要的信息。 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'))
