2

我有一堆浮点数,要么是 x.0 要么是 x.5,如果它们是 x.0,我不希望显示小数点,如果它们是 x.5,我希望显示一个小数点。

我想出了一个可以完成这项工作的单线:

f'{x:+.{int(bool(x % 1))}f}'

Whereint(bool(x % 1))将始终为 0 或 1,具体取决于模是否产生余数。

由于我的浮点输入的性质,这很好用,但它让我思考,如果我的输入不那么整洁怎么办?10.01例如,上面作为输入的单行代码返回10.0. 我的诱惑是首先将浮点数舍入到所需的精度:

f'{x:+.{int(bool(round(x, 1) % 1))}f}'

如果在我的第一个示例中还没有发生很多事情f-string,那么现在就有了。

要清楚我的问题:

首先,考虑到我的实际输入,我的第一种方法是实现我实际想要实现的目标的“正确”方法吗?

其次,假设问题和我的第二个例子怎么样?

第三,我想征求社区关于在哪里使用f-string越界滥用的意见。举个例子,一个人可能会想把很多东西打包到f-string.

f"String with number:{' ' if x >= 1000 else '  ' if x >= 100 else '   ' if x >= 10 else '    '}{x:+.{int(bool(round(x, 1) % 1))}f}"

所以我希望将这个关于过度使用f-stringin 的问题与我的舍入问题联系起来不会导致整个问题过于模糊,但这是我正在一起考虑的两个问题。我想 '整洁'f-string可以提供一种将所有东西硬塞进单行的诱惑。

4

0 回答 0