我希望有一个函数,可以将浮点数格式化为可变长度的精度。例如,如果我传入n=2,我希望精度为1.67;如果我传入n=5
,我希望得到1.66667
。
目前我有以下代码,但是我感觉应该有更简单的方法来实现。有吗?
def my_precision(x, n):
fmt = '{:.%df}' % n
return fmt.format(x)
我希望有一个函数,可以将浮点数格式化为可变长度的精度。例如,如果我传入n=2,我希望精度为1.67;如果我传入n=5
,我希望得到1.66667
。
目前我有以下代码,但是我感觉应该有更简单的方法来实现。有吗?
def my_precision(x, n):
fmt = '{:.%df}' % n
return fmt.format(x)
从Python 3.6及其以上版本的PEP 498开始,您可以使用"f-strings"来格式化字符串,如下所示
>>> x = 123456
>>> n = 3
>>> f"{x:.{n}f}"
'123456.000'
更多细节请参考:
你的解决方案很好。
然而,就个人风格而言,我倾向于仅使用%
或仅使用str.format()
。
因此,在这种情况下,我会将你的格式化函数定义为:
def my_precision(x, n):
return '{:.{}f}'.format(x, n)
(感谢 @MarkDickinson 提供了一个比 '{{:.{:d}f}}'.format(n).format(x)
更简短的替代方案)
顺便提一下,你可以直接这样做:
my_precision = '{:.{}f}'.format
它有效:
>>> my_precision(3.14159, 2)
'3.14'
:-)
str.format()
是否能正确处理格式。 - drincruzmy_precision = lambda x, n: '{}'.format(round(x, n))
round
返回一个浮点数,因此仍可能受到精度问题的影响。 - jonrsharpe
return '{:.{prec}f}'.format(x, prec=n)
稍微整洁一些,但差别不大!混合使用%
格式化和str.format
看起来非常奇怪 - 请注意,您可以使用例如'{{:.{}f}}'.format(n)
来转义大括号。 - jonrsharpe