如何删除浮点数的“.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”?的主要内容,如果未能解决你的问题,请参考以下文章