用小数点后的最少位数打印浮点数

时间:2018-09-09 16:17:40

标签: python string

是否有一种优雅的方法可以使float→str输出具有零或一位数字?

8.5应该变成'8.5',而9.0应该变成'9'。

更新。好吧,更准确地说,该方法适用于任何浮点数,并且将为“整数”浮点数输出一位保存值,该浮点数应格式化为整数,id est不带小数点。

3 个答案:

答案 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

您可以手动定义一个比较floatint值的函数:

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'