在Python中如何找到最低有效位数字
我在找一种简单的方法,来找出一个数字(无论是小数还是整数)中最不重要的数字。
举个例子:
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.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'))