Python字符串插值:仅显示必要的小数位

时间:2012-05-08 22:37:42

标签: python string formatting

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

40"

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

2.5"

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

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

但是这显示的只是一个小数位,这不是我想要的......

5 个答案:

答案 0 :(得分:8)

一个选项就像是

"{0}\"".format(str(round(x, 1) if x % 1 else int(x)))
如果没有小数部分,

会将x显示为整数。这可能是一个更好的方法。

答案 1 :(得分:3)

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

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

可能会被更神秘的替代(基于迈克尔·米奥的圆润思想):

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

如果你喜欢较短的表达式(尽管pythonic较少)。

答案 2 :(得分:3)

这是可重复使用的,可以在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"

答案 3 :(得分:1)

a = 2.5
b = 42
print("{0:.1f}".format(a).rstrip('0').rstrip('.'))
print("{0:.1f}".format(b).rstrip('0').rstrip('.')) 

输出:

2.5
42

答案 4 :(得分:1)

如果您负担得起更改结果类型的费用,则可以使用简单的检查:

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

不花哨,但直观。