python-3.x 如何使用f字符串跳过小数点的尾随零

hl0ma9xz  于 2023-05-19  发布在  Python
关注(0)|答案(3)|浏览(115)

我想在我的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//分母将总是产生一个数字。

7cjasjjr

7cjasjjr1#

如果你的字符串只有浮点数,那么你可以使用str.rstrip()(* 而不是现在的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'
yacmzcpb

yacmzcpb2#

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

rta7y2nd

rta7y2nd3#

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

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'

相关问题