我想在我的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
,但它适用于第一个print
,但失败的第二个。
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//分母将总是产生一个数字。
3条答案
按热度按时间7cjasjjr1#
如果你的字符串只有浮点数,那么你可以使用
str.rstrip()
(* 而不是现在的str.strip()
*)。此外,您需要首先使用'0'
对它进行链式调用,然后使用'.'
(如.rstrip('0').rstrip('.')
)来处理带有尾随零的整数(如10000
)。但是,如果你的字符串中可以有其他字符,并且你想只为数字剥离
0
,那么你可以使用嵌套的 f-string:yacmzcpb2#
你必须使用两种不同的格式字符串和
round
来检测何时使用它们:其产生:
请参阅格式规范迷你语言
精度是一个十进制数,指示对于使用
'f'
和'F'
的浮点值,小数点后应显示多少位;对于使用'g'
或'G'
的浮点值,小数点前后应显示多少位。这取决于您的品味,是使用我建议的
round
方法还是您提到的strip
方法。如果你理解Pythonic的方式是代码应该清晰,简洁和可维护,那么我会使用round
方法和两个格式字符串,因为它对于未来的开发人员来说非常可读/可理解。rta7y2nd3#
当不提供格式说明符时,格式化程序似乎会自动简化。因此,如果在要求自动格式化之前对值进行舍入,它会更接近所需的结果。这不是你想要的答案,但比其他答案简单。(我找到了这个问题的答案,寻找这种行为)。
证明:
我们可以通过利用您的原始想法/其他人的答案来获得您实际想要的内容(仅需要提供整数案例):
证明: