【问题标题】:Python string interpolation: only show necessary decimal placesPython字符串插值:只显示必要的小数位
【发布时间】:2012-05-17 11:08:53
【问题描述】:

如果我有例如 x = 40,我想要以下结果:

40"

对于 x = 2.5,结果应该是...

2.5"

所以我基本上想格式化到最多一位小数。我目前使用这个:

"{0:0.1f}\"".format(x, 1)

但这总是精确显示一位小数,这不是我真正想要的......

【问题讨论】:

  • 您要舍入还是截断尾随数字?

标签: python string formatting


【解决方案1】:

一个选项类似于

"{0}\"".format(str(round(x, 1) if x % 1 else int(x)))

如果没有小数部分,它会将x 显示为整数。很可能有更好的方法来解决这个问题。

【讨论】:

  • 没问题 :) 很高兴有帮助。虽然很想知道其他人是否有更清洁的方法来解决这个问题。
  • format(...) 的第二个参数是什么? (这里:1)
  • @lajarre 好问题。不知道为什么我把它放在那里。已删除。
  • amount = (str(round(amount, 2) if amount % 1 else int(amount)))
【解决方案2】:

这是可重复使用的,可用于strfloatint,并将'' 转换为0

def minimalNumber(x):
    if type(x) is str:
        if x == '':
            x = 0
    f = float(x)
    if f.is_integer():
        return int(f)
    else:
        return f

用于:

print "{}\"".format(minimalNumber(x))

例子:

x = 2.2
print "{}\"".format(minimalNumber(x))
x = 2.0
print "{}\"".format(minimalNumber(x))

哪些输出:

2.2"
2"

【讨论】:

  • 您可能希望使用float(x).is_integer() 来允许使用整数。 (is_integer 没有为整数定义)
【解决方案3】:

也许不一定完全干净的解决方案,但我认为至少更明确一点:

"{1:0.{0}f}\"".format(int(not float(x).is_integer()), x)

可能会被更神秘的替换(基于 Michael Mior 舍入的想法):

"{1:0.{0}f}\"".format(int(x % 1 > 0), x)

如果你更喜欢更短的表达式(虽然不那么 Python)。

【讨论】:

  • 这一次我看到了format 的真正用处。而且第二版比我好(更干净)
【解决方案4】:
a = 2.50
b = 42.0
c = 900.0
print("{0:.1f}".format(a).rstrip('0').rstrip('.'))
print("{0:.1f}".format(b).rstrip('0').rstrip('.'))
print("{0:.1f}".format(c).rstrip('0').rstrip('.'))  

输出:

2.5
42
900

【讨论】:

  • @dom0 @hitzg 是对的,使用 rstrip('0.') 会将900.0 剥离为9,与rstrip('0').rstrip('.') 相反,这会正确导致900。请注意,"{0:.1f}".format(...) 将始终保留至少一位小数,因此900 将被格式化为900.0,而900 将再次被剥离为900
【解决方案5】:

如果您有能力更改结果类型,则可以使用简单的检查:

if float(x) == int(x):
    print(int(x))
else:
    print(x)

不花哨,但直观。

【讨论】:

  • 欢迎来到 StackOverflow!这当然适用于不需要显示小数点的情况,但它并不能完全回答用户的问题,因为他们还希望它处理像 2.5 这样的浮点数。
  • 感谢您的欢迎和指出问题,@s3cur3
猜你喜欢
  • 2018-05-10
  • 2021-03-26
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-03-21
  • 1970-01-01
  • 2018-10-05
相关资源
最近更新 更多