对于我正在进行的编码练习,我试图比较两个数字并选择具有更多有效数字的数字。
例如:比较2.37e+07
和2.38279e+07
,选择2.38279e+07
,因为它有更多有效数字。
我不知道如何在Python中实现它。我考虑使用len(str(NUMBER))
计算每个数字的长度,但这种方法返回" 10"对于上述两个数字,因为它不区分零和非零数字。
如何比较Python中的有效位数?
答案 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)
这会检查有效数字中的每个字母,如果将其转换为字符串,即。然后它将迭代每个字母,直到它到达小数部分,然后它将数字加在一起。您可以对另一个有用的数字执行此操作,可用于比较两者之间的差异。这将告诉哪一个具有更大的附加数字。
不确定这是否是解决问题的最佳方案。