Python 如何将浮点设置为可变精度?

Python 如何将浮点设置为可变精度?,python,Python,我希望有一个函数,可以将浮点格式设置为可变长度的精度。例如,如果我传入n=2,我期望精度为1.67;如果我传入n=5,我希望1.66667 我目前有以下几点,但我觉得有一个更简单的方法。有吗 def my_precision(x, n): fmt = '{:.%df}' % n return fmt.format(x) 您可以直接使用此选项: my_precision = lambda x, n: '{}'.format(round(x, n)) 你的解决方案很好 然而,就个

我希望有一个函数,可以将浮点格式设置为可变长度的精度。例如,如果我传入n=2,我期望精度为1.67;如果我传入
n=5
,我希望
1.66667

我目前有以下几点,但我觉得有一个更简单的方法。有吗

def my_precision(x, n):
    fmt = '{:.%df}' % n
    return fmt.format(x)

您可以直接使用此选项:

my_precision = lambda x, n: '{}'.format(round(x, n))
你的解决方案很好

然而,就个人风格而言,我倾向于只使用
%
,或者只使用
str.format()

因此,在本例中,我将您的格式化函数定义为:

def my_precision(x, n):
    return '{:.{}f}'.format(x, n)
(感谢@MarkDickinson为
'{{:.{:d}f}}.格式(n).格式(x)
提供了一个较短的替代方案)


顺便说一句,您可以简单地执行以下操作:

my_precision = '{:.{}f}'.format
它的工作原理是:

>>> my_precision(3.14159, 2)
'3.14'
:-)

2019年,Python>=3.6 从Python3.6和PEP498中,您可以使用“f-strings”来设置如下格式

>>> x = 123456
>>> n = 3
>>> f"{x:.{n}f}"
'123456.000'
有关更多详细信息,请参阅此处:


在我看来,你似乎已经回答了自己的问题。你在那里写的东西不管用吗?
返回“{:.{prec}f}”。格式(x,prec=n)
稍微整洁一点,但不是很整洁!将
%
格式与
str.format
混合使用似乎很奇怪-注意,您可以使用例如
'{:{}f}'.format(n)
来转义大括号。@DanGetz我的解决方案很有效,但我对混合这两种字符串格式感到担忧。请注意
round
返回一个
float
,因此仍然会受到精度问题的影响。@mescalinum谢谢,我也不喜欢混合格式,也不确定仅使用
str.format()
格式会如何正确工作。