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)
这里我想打印z
的N
小数位,但我没有得到想要的结果。相反,我得到了一个错误。
字符串插值不能以这种方式工作。字符串的格式说明符部分需要已经是字符串的一部分——不能将其作为使用它的格式函数的一部分进行插值
要执行您想要的操作,您需要创建一个字符串,该字符串将首先格式化分数,然后使用它。
# 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))