Django float格式只能在浮点后获得数字

时间:2014-12-10 14:36:49

标签: python django floating-point django-templates django-template-filters

是否有django模板过滤器只能获取浮点后的数字?

例如:

2.34 --> 34
2.00 --> 00
1.10 --> 10

我在https://docs.djangoproject.com/en/dev/ref/templates/builtins/找不到答案。

3 个答案:

答案 0 :(得分:4)

creating your own custom filter之外,您可以使用django-mathfilters package解决问题:

{{ value|mod:1|mul:100|floatformat:"0" }}

其中:

  • mod是"模数"过滤器由mathfilters
  • 提供
  • mul是"乘法"过滤器由mathfilters
  • 提供
  • floatformat是内置的django过滤器

演示:

>>> from django.template import Template, Context
>>> c = Context({'value': 2.34})
>>> t = Template('{% load mathfilters %}{{ value|mod:1|mul:100|floatformat:"0" }}')
>>> t.render(c)
u'34'

答案 1 :(得分:0)

由于有太多其他问题提到这个问题,我还想补充一个答案。

至于我,@ alecxe提出的答案是一种矫枉过正。可读性很糟糕,您的项目开始依赖于额外的库。但是你只需要在页面上显示两位数字。

创建自己的模板的解决方案似乎更好。它看起来更简单,使用更少的操作,没有依赖性。

@register.filter
def floatfract(value):
    sf = "%.2f" % value
    return sf.split('.')[1]

并在模板中使用它:

{{ object.price|floatfract }}

就是这样。我正在使用它。

只是为了使答案完整,我可以在你希望灵活的分数长度的情况下扩展它。例如,有2到5位数字。 看起来更糟糕

@register.filter
def floatfract(value, length=2):
    sf = "%.{length}f".format(length=length) % value
    return sf.split('.')[1]

用法:

{{ object.price|floatfract:5 }}

答案 2 :(得分:0)

最好编写自己的过滤器,但是如果您不想这样做,我可以为您提供另一种并非最佳的“惰性”解决方案:

{{ value|stringformat:"f"|slice:"-6:-4" }}