如果我有例如x = 40,我想得到以下结果:
40"
对于x = 2.5,结果应该是......
2.5"
所以我基本上想要格式化到最多一个小数位。我目前使用这个:
"{0:0.1f}\"".format(x, 1)
但是这显示的只是一个小数位,这不是我想要的......
答案 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)
这是可重复使用的,可以在str
,float
或int
上使用,并将''
转换为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)
不花哨,但直观。