【问题标题】:How can I remove ".0" of float numbers?如何删除浮点数的“.0”?
【发布时间】:2023-03-25 11:58:01
【问题描述】:

假设我有一个浮点数。如果它是一个整数(例如 1.0、9.0、36.0),我想删除“.0(小数点和零)”并写入标准输出。例如,结果将是 1、9、36。如果浮点数是有理数,例如 2.5335 和 95.5893,我希望输出与输入的一样,即 2.5335 和 95.5893。有没有聪明的方法来做到这一点?

只有数字在小数位上是否有 .0 或其他数字才重要。我可以说我的问题是:我怎么知道浮点数实际上是否是整数?

我想用它来决定目录名称。比如我输入9.0和2.45,就创建两个目录,dir9和dir2.45。

【问题讨论】:

  • "如果浮点数是有理数,例如 2.5335 和 95.5893,我希望输出与输入的一样。"这是什么意思?
  • 当 Python 告诉您某个 1.0 没有从头到尾都是零时,您是否相信 Python 是正确的,或者您是否只想检查前几位数字,如您的示例所示?跨度>
  • 你知道0.1 + 0.2 != 0.3(以及浮点数是二进制而不是十进制的其他有趣结果)吗?
  • 我明白 0.1 可能不完全是 0.1,但为什么 1.0 不能正好是 1.0? 0.1 + 0.2 != 0.3 似乎与这个问题无关。你能解释一下它与我的问题有什么关系吗?

标签: floating-point int python-3.5


【解决方案1】:

这里有一个函数可以按照你想要的方式格式化你的数字:

def formatNumber(num):
  if num % 1 == 0:
    return int(num)
  else:
    return num

例如:

formatNumber(3.11111)

返回

3.11111


formatNumber(3.0)

返回

3

【讨论】:

    【解决方案2】:

    您可以结合前面的 2 个答案:

    formatNumber = lambda n: n if n%1 else int(n)
    
    >>>formatNumber(5)
    5
    
    >>>formatNumber(5.23)
    5.23
    
    >>>formatNumber(6.0)
    6
    

    【讨论】:

    • 可以定义formatNumber = lambda n: int(n) if isinstance(n,float) and n.is_integer() else n
    【解决方案3】:

    你可以使用string formatting

    >>> "%g" % 1.1
    '1.1'
    
    >>> "%g" % 1.0
    '1'
    

    【讨论】:

      【解决方案4】:

      你可以用 fstrings 来做到这一点

      print(f'{1.0:g},{1.2:g}')  # Output: 1,1.2
      

      【讨论】:

        【解决方案5】:

        只需输入 整数(数字) 示例:

        int(3.0)
        

        返回

        3
        

        【讨论】:

        • 不幸的是,int(3.5) 还返回 3,这是 OP 特别不希望发生的。
        猜你喜欢
        • 2015-10-02
        • 1970-01-01
        • 2012-08-11
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多