在Python中,如何将浮点舍入到小数点后n位,包括末尾的0
我需要做一个函数,返回四舍五入的pi到n位小数作为字符串。例如,圆周率数字(3)应返回“3.142”,圆周率数字(0)返回“3”。这是我的密码:在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
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
的人都应该准备好面对错误:)原始函数具有错误处理功能,至少提供了与原始函数一样安全的方法。