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

4
为了完成一个编程练习,我正在尝试比较两个数字并选择具有更多有效数字的数字。
例如:比较2.37e+072.38279e+07,选择2.38279e+07,因为它有更多有效数字。
我不知道如何在Python中实现这一点。我考虑使用len(str(NUMBER))计算每个数字的长度,但是该方法对上述两个数字都返回“10”,因为它不能区分零和非零数字。
如何在Python中比较有效数字的数量?

2
你是从 float 对象还是 str 对象开始的? - Mark Dickinson
1
如果它们是float类型,那么您需要查看输入数字的精度而不是计算出的数字,因为它们可能具有“人为有效数字”?实际上,输出结果的准确性与输入精度的准确性直接相关。 - Ryan Vincent
3个回答

2

一个快速且简单的方法可能是 len(str(NUMBER).strip('0')),这将去除任何尾随的零并计算剩余的数字。

如果要去除小数点,那么您需要使用 len(str(NUMBER).replace('.','').strip('0'))

但是需要注意,在许多情况下,将Python浮点数转换为字符串可能会导致一些奇怪的行为,因为浮点数的处理方式不同。


1
如果您想以文本方式进行操作,可以使用正则表达式来执行以下操作:
import re

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

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

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)

这将检查显著数字中的每个字母,如果将其转换为字符串的话。然后它将遍历每个字母,直到达到小数部分,然后将数字相加。您可以对另一个显著数字执行此操作,以比较两者之间的差异。这将告诉您哪个具有更大的添加数字。

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


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接