【问题标题】:Django float format get only digits after floating pointDjango 浮点格式在浮点数之后只获取数字
【发布时间】:2015-02-08 19:19:10
【问题描述】:

是否有一个 django 模板过滤器可以只获取浮点数之后的数字?

例如:

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

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

【问题讨论】:

  • 你总是可以自己写...

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


【解决方案1】:

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

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

【讨论】:

    【解决方案2】:

    由于这个问题涉及的其他问题太多,我也想再添加一个答案。

    对于我来说,@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 }}
    

    【讨论】:

      【解决方案3】:

      除了creating your own custom filter,你还可以使用django-mathfilters package解决:

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

      地点:

      • modmathfilters 提供的“模”过滤器
      • mulmathfilters 提供的“乘法”过滤器
      • 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'
      

      【讨论】:

      • 谢谢!但是,有什么技巧可以得到前导零吗?使用当前过滤器:2.04 --> 4。我想要 2.04 --> 04。我尝试添加 |stringformat:"02d" 但没有成功。
      猜你喜欢
      • 1970-01-01
      • 2010-12-16
      • 2011-08-05
      • 2019-01-06
      • 2015-12-12
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多