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