繁体   English   中英

如何在 Python 的 f 字符串中从十进制中跳过尾随零?

[英]How to skip trailing zeroes from decimal in Python's f-strings?

我想在我的 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')但我想知道是否有更好的方法。

编辑:

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

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

但是,如果您的字符串中可以包含其他字符,并且您只想为数字去除0 ,那么您可以使用嵌套的 f-string

>>> f"{f'{1002/1000:.2f}'.rstrip('0').rstrip('.')} number"
'1 number'

>>> f"{f'{1009/1000:.2f}'.rstrip('0').rstrip('.')} number"
'1.01 number'

>>> f"{f'{1000:.2f}'.rstrip('0').rstrip('.')} number"
'1000 number'

您必须使用两种不同的格式字符串并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方法,因为它对于未来的开发人员来说非常可读/易于理解。

当不提供格式说明符时,格式化程序似乎会自动简化。 因此,如果在要求自动格式化之前对值进行四舍五入,它会更接近所需的结果。 这不完全符合您的要求,但比其他答案更简单。 (我找到了解决这个问题的方法来寻找这种行为)。

i = 1002
print(f'{round(i/1000, 2)}')  # 1.0

i = 1009
print(f'{round(i/1000, 2)}')  # 1.01

证明:

>>> i = 1002
>>> f'{round(i/1000,2)}'
'1.0'
>>> i = 1009
>>> f'{round(i/1000,2)}'
'1.01'

我们可以通过利用您的原始想法/其他人的答案来得到您真正想要的(只需要提供整数情况):

i = 1002
print(f'{round(i/1000, 2)}'.rstrip('.0'))  # 1

i = 1009
print(f'{round(i/1000, 2)}'.rstrip('.0'))  # 1.01

证明:

>>> i = 1002
>>> f'{round(i/1000, 2)}'.rstrip('.0')
'1'
>>> i = 1009
>>> f'{round(i/1000, 2)}'.rstrip('.0')
'1.01'

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM