如何在Python';s-f-strings?

如何在Python';s-f-strings?,python,python-3.x,format,f-string,Python,Python 3.x,Format,F String,我想在我的f字符串中设置一个精度,但我不想在小数部分设置尾随的零 i = 1002 print(f'{i/1000:.2f}') # 1.00 but this must be 1 i = 1009 print(f'{i/1000:.2f}') # 1.01, this is correct 第一个print必须是1,我的预期行为可以在第二个print中看到,它是1.01 我尝试了:g,但它在第一次打印时有效,但在第二次打印时失败 i = 1000 print(f'{i/1000:.2g}'

我想在我的f字符串中设置一个精度,但我不想在小数部分设置尾随的零

i = 1002
print(f'{i/1000:.2f}') # 1.00 but this must be 1

i = 1009
print(f'{i/1000:.2f}') # 1.01, this is correct
第一个
print
必须是
1
,我的预期行为可以在第二个
print
中看到,它是
1.01

我尝试了
:g
,但它在第一次
打印时有效,但在第二次打印时失败

i = 1000
print(f'{i/1000:.2g}') # 1, this is correct but
i = 1009
print(f'{i/1000:.2g}') # 1, but this must be 1.01
我尝试的一种方法是
f'{I/1000:.2f}'。strip('.0')
,但我想知道是否有更好的方法

编辑:


在我的实际代码中,如果
i
100000
,那么分母也将是100000(以
i
的顺序排列的最小数字),换句话说,我代码中的分母将始终是这样的:i//分母将始终产生一个位数。

如果字符串只有浮点数,那么您可以使用(而不是您现在拥有的)。此外,您需要首先使用
'0'
对它进行链式调用,然后使用
'0'
.rstrip('0').rstrip('.')
来处理带有尾随零的整数,如
10000

但是,如果您可以在字符串中包含其他字符,并且只想为数字去除
0
,则可以将嵌套的f字符串用作:


您必须使用两种不同格式的字符串和
round
来检测何时使用它们:

for i in [1002, 1009]:
    print(f'{i/1000:.0f}') if round(i/1000, 2) == 1.00 else print(f'{i/1000:.2f}')
这将产生:

1
1.01
参考

精度是一个十进制数,指示使用
'f'
'f'
格式的浮点值的小数点后应显示多少位,或使用
'g'
'g'
格式的浮点值的小数点前后应显示多少位


取决于您的品味,是使用我建议的
round
方法还是您提到的
strip
方法。如果您理解Pythonic的方式是代码应该清晰、简洁和可维护,那么我会使用
round
方法和两种格式的字符串,因为它非常可读/可理解用于未来开发人员。

This
f'{i/1000:.2f}.strip('.0'))
如果整数可能出现是个坏主意-如果
i=100000
,那么你会在我的实际代码中得到
1
@Daweo如果它是
100000
,那么分母也将是
100000
,换句话说,我代码中的分母将始终是
i//分母
将始终产生一个位数
 rstrip
也给了我同样的答案,有什么理由我不应该使用我已有的吗?检查每个函数的链接文档。
strip()
删除前导和尾随传递的字符。
rstrip()
只需删除您需要的尾随字符。浮点数不会以
开头。0
至少在我的情况下,它保证是f字符串中的浮点数。如果没有更好的答案,我会接受这个答案,谢谢。我确实考虑过这一点,但它似乎很冗长,想知道是否有更好的方法很可能不是,如果您指定一个带两位小数的格式字符串,Python将无论如何打印它们。
1
1.01