如何删除浮点数的“.0”?

Posted

技术标签:

【中文标题】如何删除浮点数的“.0”?【英文标题】:How can I remove ".0" of float numbers? 【发布时间】:2016-11-11 23:16:03 【问题描述】:

假设我有一个浮点数。如果它是一个整数(例如 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: Remove division decimal的可能重复 当 Python 告诉您某个 1.0 没有从头到尾都是零时,您是否相信 Python 是正确的,或者您是否只想检查前几位数字,如您的示例所示?跨度> 你知道0.1 + 0.2 != 0.3(以及浮点数是二进制而不是十进制的其他有趣结果)吗? 我明白 0.1 可能不完全是 0.1,但为什么 1.0 不能正好是 1.0? 0.1 + 0.2 != 0.3 似乎与这个问题无关。你能解释一下它与我的问题有什么关系吗? 【参考方案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 特别不希望发生的。

以上是关于如何删除浮点数的“.0”?的主要内容,如果未能解决你的问题,请参考以下文章

如何将元素左右对齐没有绝对位置或浮点数

从点后的浮点数中取值

浮点数不评估为负数(Python)

js中如何判断两个浮点数是不是相等

C语言浮点数误差如何解决?如下

MODBUS RTU协议中浮点数是如何存储,读到浮点数寄存器的数值如何转换成所需的浮点数