在Python中,如何将浮点舍入到小数点后n位,包括末尾的0

在Python中,如何将浮点舍入到小数点后n位,包括末尾的0,python,rounding,Python,Rounding,我需要做一个函数,返回四舍五入的pi到n位小数作为字符串。例如,圆周率数字(3)应返回“3.142”,圆周率数字(0)返回“3”。这是我的密码: from math import pi def pi_digits(n): if n > 0: return str(round(pi, n)) else: return str(round(pi)) 但pi_数字(12)返回的是“3.14159265359”,而不是“3.14159265359

我需要做一个函数,返回四舍五入的pi到n位小数作为字符串。例如,圆周率数字(3)应返回“3.142”,圆周率数字(0)返回“3”。这是我的密码:

from math import pi

def pi_digits(n):
    if n > 0:
        return str(round(pi, n))
    else:
        return str(round(pi))
但pi_数字(12)返回的是“3.14159265359”,而不是“3.141592653590”。如何考虑舍入时的0?

试试:

'{:.{width}f}'.format(pi, width=12)
输出:

'3.141592653590'

使用字符串格式,而不是对取整的输出调用
str
,这在Python版本中表现不一致。例如,在Python2中,当对浮点调用
str
时(即使用
float.\uuu str\uuu
),字符计数精度永远不会超过12<代码>str.format删除此类差异:

from math import pi

def pi_digits(n):
    return '{:.{}f}'.format(pi, n)

print(pi_digits(12))
# 3.141592653590

print(pi_digits(3))
# 3.142

print(pi_digits(0))
# 3

保留尾随零只是惯例,但它仍然存在。如果执行pi,会发生什么情况?数字(13)
pi数字(-1)
将引发
ValueError
,您需要添加
if。。else
来保证它的安全。@Szabolcs视情况而定。任何以浮点精度传递
-1
的人都应该准备好面对错误:)原始函数具有错误处理功能,至少提供了与原始函数一样安全的方法。