gpt4 book ai didi

python - 如果 Jinja2 没有小数值,如何四舍五入为零小数?

转载 作者:太空宇宙 更新时间:2023-11-03 12:47:16 25 4
gpt4 key购买 nike

我使用(优秀)Flask framework 构建网站我现在想在其中显示一些数字。 round filter由 jinja2 提供的工作正常,除非没有小数值:

{{ 1.55555|round(2) }} -> 1.56
{{ 1.5|round(2) }} -> 1.5
{{ 1.0|round(2) }} -> 1.0
{{ 1|round(2) }} -> 1.0

但我希望最后两个显示为 1(没有尾随 .0)。有人知道我如何用 jinja2 做到这一点吗?欢迎所有提示!

[编辑]

我尝试使用 trim() ,但令我惊讶的是,下面的代码片段给出了一个 TypeError: do_trim() takes exactly 1 argument (2 given):

{{ 1.0|round(2)|trim('.0') }}

最佳答案

您可以使用 string filter , 然后使用 str.rstrip :

>>> import jinja2
>>> print(jinja2.Template('''
... {{ (1.55555|round(2)|string).rstrip('.0') }}
... {{ (1.5|round(2)|string).rstrip('.0') }}
... {{ (1.0|round(2)|string).rstrip('.0') }}
... {{ (1|round(2)|string).rstrip('.0') }}
... ''').render())

1.56
1.5
1
1

注意

使用str.rstrip,您将得到一个空字符串0

>>> jinja2.Template('''{{ (0|round(2)|string()).strip('.0') }}''').render()
u''

这是避免上述情况的解决方案(调用 rstrip 两次;一次使用 0,一次使用 )

>>> print(jinja2.Template('''
... {{ (1.55555|round(2)|string).rstrip('0').rstrip('.') }}
... {{ (1.5|round(2)|string).rstrip('0').rstrip('.') }}
... {{ (1.0|round(2)|string).rstrip('0').rstrip('.') }}
... {{ (1|round(2)|string).rstrip('0').rstrip('.') }}
... {{ (0|round(2)|string).rstrip('0').rstrip('.') }}
... ''').render())

1.56
1.5
1
1
0

更新 以上代码会将 10 修剪为 1。以下代码没有问题。使用 format filter .

>>> print(jinja2.Template('''
... {{ ("%.2f"|format(1.55555)).rstrip('0').rstrip('.') }}
... {{ ("%.2f"|format(1.5)).rstrip('0').rstrip('.') }}
... {{ ("%.2f"|format(1.5)).rstrip('0').rstrip('.') }}
... {{ ("%.2f"|format(1.0)).rstrip('0').rstrip('.') }}
... {{ ("%.2f"|format(0)).rstrip('0').rstrip('.') }}
... {{ ("%.2f"|format(10)).rstrip('0').rstrip('.') }}
... ''').render())

1.56
1.5
1.5
1
0
10

关于python - 如果 Jinja2 没有小数值,如何四舍五入为零小数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28458524/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com