【发布时间】:2014-08-29 15:15:36
【问题描述】:
我正在寻找一种简单的方法来查找数字(浮点数或整数)中的最低有效位。
例如:
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(最少的 SigDigit 部分),但它返回的数字没有任何(数学)参考数字的幂(我也希望避免大量的字符串转换)。
这是我 searched stackoverflow 时出现的问题,但似乎没有帮助(如果我使用了错误的术语/搜索短语,我提前道歉)
【问题讨论】:
-
对于
3.5的近似值,实际上应该是3.5000000000000000000000001,输出应该是什么? -
对于整数来说,这还不错(酌情使用
%10和/=10)。对于浮点数,这可能是不可能的:如果.1被转换为.0999999999,你的答案就会彻底改变。我不明白你的例子101.2 -> 0.1;是错字吗? -
如果您需要特定的小数舍入行为,您可能需要
decimal模块。 -
@Andrew Johnson 我没想到/通常不需要担心。如果不阅读更多细节,我假设 '1.1 + 2.2' = 3.3 而不是 3.3000000000000003,以防影响事情。
-
这是一个不好的假设,因为四舍五入可能会导致数字太小而不是太大。 (例如,在我的机器上 1.2 + 2.4 是 3.5999999999999996。)
标签: python math significant-digits