如果我有例如 x = 40 我想要以下结果:
40"
对于 x = 2.5,结果应该是......
2.5"
所以我基本上想格式化到最多一位小数。我目前使用这个:
"{0:0.1f}\"".format(x, 1)
但这总是精确显示一位小数,这并不是我真正想要的......
如果我有例如 x = 40 我想要以下结果:
40"
对于 x = 2.5,结果应该是......
2.5"
所以我基本上想格式化到最多一位小数。我目前使用这个:
"{0:0.1f}\"".format(x, 1)
但这总是精确显示一位小数,这并不是我真正想要的......
一种选择是
"{0}\"".format(str(round(x, 1) if x % 1 else int(x)))
x
如果没有小数部分,它将显示为整数。很可能有更好的方法来解决这个问题。
这是可重复使用的,可用于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"
也许不一定完全干净的解决方案,但我认为至少更明确一点:
"{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)。
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
如果您负担得起更改结果类型的费用,则可以使用简单的检查:
if float(x) == int(x):
print(int(x))
else:
print(x)
不花哨,但直观。