如何在python中打印小数到N


t=int(input())
for _ in range(t):
N=int(input())
a,b=stdin.readline().split()
z=int(a)/int(b)
x='{0:.Nf}'.format(z)
print(x)

这里我想打印zN小数位,但我没有得到想要的结果。相反,我得到了一个错误。

字符串插值不能以这种方式工作。字符串的格式说明符部分需要已经是字符串的一部分——不能将其作为使用它的格式函数的一部分进行插值

要执行您想要的操作,您需要创建一个字符串,该字符串将首先格式化分数,然后使用它。

# e.g. N = 5
fstr = "{{0:.{0}f}}".format(N)
print(fstr)

双大括号是指";逃逸;大括号,即告诉Python将其用作文本{},而不是将其解释为格式字符串。

这会给你

{0:.5f}

然后,使用fstr

# e.g. z = 22 / 7
x = fstr.format(z)
print(x)

这就产生了

3.14286

或者,您可以使用round()函数将z舍入到N小数位,然后打印

您试图在字符串中间使用类型为int的N参数化控制格式化字符串的宽度。看看这段代码,它将值硬编码为3:

thisFloat = 0.12345678
'{0:.3f}'.format(thisFloat)

并与此附加代码进行比较:

N = 3
fstring = '{0:.'+str(N)+'f}'
fstring.format(thisFloat)

两者都会产生相同的输出,因为在第二个示例中,int N已被强制转换为字符串。

我认为在这里,您必须使用round()函数。

t = int(input())
for _ in range(t):
N = int(input())
a, b = stdin.readline().split()
print(round(int(a)/int(b), N))

最新更新