【问题标题】:Compare the number of significant digits in two numbers比较两个数字的有效位数
【发布时间】:2016-01-26 17:57:32
【问题描述】:

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

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

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

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

【问题讨论】:

  • 你是从float对象还是str对象开始的?
  • 如果它们是float,那么您需要查看输入数字的精度而不是计算出的数字,因为它们可能具有“有效数字的人工数量”?实际上,输出结果的准确性直接关系到输入精度的准确性。

标签: python


【解决方案1】:

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

要打折小数点,那么你需要len(str(NUMBER).replace('.','').strip('0'))

但是您需要记住,由于浮点数的处理方式,在许多情况下,将 python 浮点数转换为字符串可能会给您带来一些奇怪的行为。

【讨论】:

    【解决方案2】:

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

    import re
    
    l = re.compile(r'(\d*?)(0*)(\.0?)')
    
    >>> l.match(str(2.37e+07)).groups()[0]
    '237'
    

    【讨论】:

      【解决方案3】:

      可以试试这样的算法:

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

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

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

      【讨论】:

        猜你喜欢
        • 2011-07-24
        • 1970-01-01
        • 2014-05-15
        • 2020-03-22
        • 1970-01-01
        • 2011-05-10
        • 2016-01-22
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多