2

我正在寻找一种希望简单的方法来查找数字(浮点数或整数)中的最低有效数字。

例如:

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时出现的问题,但似乎没有帮助(如果我使用了错误的术语/搜索短语,我提前道歉)

4

1 回答 1

7

如果你已经有花车,这是行不通的。Python 浮点数不携带您需要的信息。1.和之间没有区别1.0,如果你将 a1.0和 a分开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'))
于 2014-08-29T15:32:18.363 回答