是否有一种优雅的方法可以使float→str输出具有零或一位数字?
8.5应该变成'8.5',而9.0应该变成'9'。
更新。好吧,更准确地说,该方法适用于任何浮点数,并且将为“整数”浮点数输出一位保存值,该浮点数应格式化为整数,id est不带小数点。
答案 0 :(得分:2)
在Python 3.6+中,您应该考虑格式化的字符串文字(PEP 498):
x = 8.5
y = 9.0
z = 8.05
for i in (x, y, z):
print(f'{i:.9g}')
8.5
9
8.05
您可以手动定义一个比较float
和int
值的函数:
def make_str(x):
float_val = float(x)
int_val = int(float_val)
if float_val == int_val:
return str(int_val)
return str(float_val)
make_str(9.0) # '9'
make_str(8.5) # '8.5'
答案 1 :(得分:1)
仅replace
:
>>> s = 8.5
>>> str(s).replace('.0', '')
8.5
>>> s = 9.0
>>> str(s).replace('.0', '')
9
8.05
之类的案例无法使用replace
。要处理此类情况,请使用re.sub
:
import re
s = 8.05
print(re.sub(r'\.0*$', '', str(s)))
# 8.05
答案 2 :(得分:0)
事实证明,对于我的用例,我可以使用Decimal而不是float,并从字符串中进行设置,并且它做对了™:
>>> 'value={}'.format(Decimal('5'))
'value=5'
>>> 'value={}'.format(Decimal('5.5'))
'value=5.5'