比较两个数字中的有效位数

时间:2016-01-26 17:57:33

标签: python

对于我正在进行的编码练习,我试图比较两个数字并选择具有更多有效数字的数字。

例如:比较2.37e+072.38279e+07,选择2.38279e+07,因为它有更多有效数字。

我不知道如何在Python中实现它。我考虑使用len(str(NUMBER))计算每个数字的长度,但这种方法返回" 10"对于上述两个数字,因为它不区分零和非零数字。

如何比较Python中的有效位数?

3 个答案:

答案 0 :(得分:2)

快速而肮脏的方法可能是len(str(NUMBER).strip('0')),它会删除任何尾随的零并计算剩余的数字。

要折扣小数点,您需要len(str(NUMBER).replace('.','').strip('0'))

但是你需要记住,在很多情况下,将python float转换为字符串可能会给你一些奇怪的行为,因为处理浮点数的方式。

答案 1 :(得分:1)

如果您打算以文本方式进行此操作,可以使用正则表达式执行以下操作:

import re

l = re.compile(r'(\d*?)(0*)(\.0?)')

>>> l.match(str(2.37e+07)).groups()[0]
'237'

答案 2 :(得分:0)

可以尝试这样的算法:

sf1 = "2.3723805"
addsf1 = 0
decimal = False
for num in sf1:
    if decimal == True:
        addsf1 = addsf1 + int(num)
    if num == ".":
        decimal = True
print(addsf1)

这会检查有效数字中的每个字母,如果将其转换为字符串,即。然后它将迭代每个字母,直到它到达小数部分,然后它将数字加在一起。您可以对另一个有用的数字执行此操作,可用于比较两者之间的差异。这将告诉哪一个具有更大的附加数字。

不确定这是否是解决问题的最佳方案。