12

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

40"

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

2.5"

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

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

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

4

5 回答 5

10

一种选择是

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

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

于 2012-05-08T22:43:54.527 回答
5

这是可重复使用的,可用于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"
于 2014-11-29T17:15:39.673 回答
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)

如果您更喜欢较短的表达式(尽管不那么 Pythonic)。

于 2012-05-09T00:19:40.373 回答
1
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
于 2018-07-07T22:52:06.073 回答
1

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

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

不花哨,但直观。

于 2020-05-01T14:25:54.070 回答