打印带有n位小数的整数或浮点数

时间:2017-02-27 15:49:00

标签: python python-3.x floating-point int precision

在Python中,如果后一种情况要求我将打印输出限制为一定数量的数字,如何打印可能是整数或实数的数字呢?

长话短说,我们有以下例子:

print("{0:.3f}".format(num)) # I cannot do print("{}".format(num))
                             # because I don't want all the decimals

是否有“Pythy”方式确保例如如果num == 1我打印1而不是1.000(我的意思是除了使用if语句混乱我的代码之外)

4 个答案:

答案 0 :(得分:10)

使用Python 3 *,您可以使用round(),因为除了舍入float之外,当应用于整数时,它将始终返回int

>>> num = 1.2345
>>> round(num,3)
1.234
>>> num = 1
>>> round(num,3)
1

此行为记录在help(float.__round__)

Help on method_descriptor:

__round__(...)
    Return the Integral closest to x, rounding half toward even.
    When an argument is passed, work like built-in round(x, ndigits).

help(int.__round__)

Help on method_descriptor:

__round__(...)
    Rounding an Integral returns itself.
    Rounding with an ndigits argument also returns an integer.

*在Python 2中,round()总是returnfloat

答案 1 :(得分:4)

如果您需要为浮点值保持固定宽度,可以使用printf-style formatting,如下所示:

>>> num = 1
>>> print('%0.*f' % (isinstance(num, float) * 3, num))
1
>>> num = 1.2345
>>> print('%0.*f' % (isinstance(num, float) * 3, num))
1.234
>>> num = 1.2
>>> print('%0.*f' % (isinstance(num, float) * 3, num))
1.200

答案 2 :(得分:1)

如果使用固定数量的浮点数,则可以使用替换来删除额外的0。例如,这可以解决问题:

print("{:.3f}".format(1).replace(".000", ""))

答案 3 :(得分:0)

有关小数点的固定编号:

>>> num = 0.2
>>> print('%.04*f' % num)
0.2000

>>> num = 3.102
>>> print('%.02*f' % num)
3.10