【问题标题】:Formatting floats with decimal dots and limited decimal part in Django templates在 Django 模板中使用小数点和有限的小数部分格式化浮点数
【发布时间】:2016-03-17 20:12:58
【问题描述】:

我知道我可以通过使用过滤器floatformat:2 来限制浮点数中的小数位数,它输出本地化的浮点数,而且我知道过滤器stringformat:"f" 输出像 1.54 这样的虚线浮点数而不是像 1,54 这样的本地化逗号浮动。

例如,如果原始浮点数是 1.54233 我想打印 1.54 而不是 1,541.54233。这可以在不需要自定义过滤器的情况下实现吗?

【问题讨论】:

  • 不确定我是否理解您的问题。 floatformat 不是自定义过滤器,为什么不用呢?
  • @ShangWang 因为floatformat 使用逗号而不是点(或点)返回本地化浮点数
  • 您可以使用一些标签更改块中的语言环境,请参阅docs.djangoproject.com/en/1.9/topics/i18n/formatting/#localize

标签: python django python-3.x django-templates django-1.8


【解决方案1】:

请注意,本地化(以及unlocalize filter and localize tags)对floatformat 的输出有NO影响!在撰写本文时,有一个open issue about better documentation

虽然将语言切换为“en”是一种解决方法,但没有必要实现 (a) 始终使用点和 (b) 限制小数位数,并且在我看来要利用语言功能的副作用不太理想。

要使用独立于本地化的 Django 模板过滤器正确格式化浮点数,可以使用stringformatPrintf-style formatting 不仅接受单个转换(如"f"),还接受几个可选参数,如“精度”。有关详细信息,请参阅链接的 Python 文档。

要将您的浮点 1.54233 格式化为 1.54,只需使用:

{{ float_value|stringformat:".2f" }}

【讨论】:

    【解决方案2】:

    只需使用本地化/非本地化格式分隔符

    https://docs.djangoproject.com/en/1.9/topics/i18n/formatting/#std:templatefilter-localize

    例如:

    {% load l10n %}

    {{ value|localize }}

    要禁用单个值的本地化,请使用 unlocalize。控制 对模板的大部分进行本地化,使用 localize 模板标签。取消本地化¶

    强制打印单个值而不进行本地化。

    例如:

    {% load l10n %}

    {{ value|unlocalize }}

    要强制本地化单个值,请使用 localize。控制 对模板的大部分进行本地化,使用 localize 模板标签。

    编辑:

    https://docs.djangoproject.com/en/1.9/topics/i18n/translation/#switching-language-in-templates

    {% load i18n %}
    
    {% get_current_language as LANGUAGE_CODE %}
    <!-- Current language: {{ LANGUAGE_CODE }} -->
    <p>{% trans "Welcome to our page" %}</p>
    
    {% language 'en' %}
        {% get_current_language as LANGUAGE_CODE %}
        <!-- Current language: {{ LANGUAGE_CODE }} -->
        <p>{% trans "Welcome to our page" %}</p>
    {% endlanguage %}
    

    如果本地化/取消本地化不起作用,您可以切换语言以强制显示

    【讨论】:

    • 我可以在floatformat 过滤器之后使用它吗?喜欢{{ val|floaformat:2|unlocalize}} ?
    • 由于某种原因它不起作用,我的意思是即使使用localize off,浮点数仍以逗号作为小数分隔符打印我认为floatfomat 过滤器没有考虑它
    • 这很奇怪,我不得不禁用 I10N 才能停止显示逗号,但 unlocalize 不起作用
    • 再测试一下,我确认floatformat确实忽略了unlocalize过滤器和localize off标签,那该怎么办呢?
    • floatformatlanguage 一起使用仍然有效,因此您可以使用{% language 'en'%}{{ value|floatformat:'1' }}{% endlanguage %} 来获得“未本地化”的值。如果你需要一个实数
    猜你喜欢
    • 2015-04-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-04-18
    • 2011-12-17
    • 2011-11-21
    • 2016-12-24
    • 2011-09-15
    相关资源
    最近更新 更多