在Python中如何找到最低有效位数字

2 投票
1 回答
6469 浏览
提问于 2025-04-18 20:43

我在找一种简单的方法,来找出一个数字(无论是小数还是整数)中最不重要的数字。

举个例子:

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,这不是我想要的结果)。这和手动调整数据范围中的分类界限有关(不过这有点偏题了)。

这是我做的功课:

这个看起来不错(最不重要数字的部分),但它返回的数字没有任何(数学上的)关于数字的幂的参考(而且我希望能避免很多字符串转换)。

这是我在搜索StackOverflow时找到的内容,但似乎没有什么帮助(如果我用错了术语或搜索词,提前道歉)。

1 个回答

8

如果你已经在使用浮点数,这个方法就不适用了。Python中的浮点数并不包含你需要的信息。比如说,1.1.0是没有区别的。而且如果你把1.03.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'))

撰写回答