在网站内容的呈现中,我们常常需要展示各种数值,例如商品价格、折扣百分比或统计数据。这些数值很多时候是浮点数,而为了保证页面布局的美观和信息的清晰,我们通常需要对它们进行格式化,例如统一保留两位小数。在 AnQiCMS 的模板中,得益于其灵活的模板引擎,我们可以非常方便地利用内置的 floatformat 过滤器来实现这一需求。

核心功能:floatformat 过滤器

floatformat 过滤器是 AnQiCMS 模板中专为处理浮点数显示而设计的工具。它的主要作用是将一个数值(无论原始类型是浮点数还是形似浮点数的字符串)格式化为指定小数位数的文本。如果原始数值的小数部分长度不足指定位数,它会自动补零;如果超出指定位数,则会进行标准的四舍五入。

它的基本使用方式非常直观:

{{ 变量名|floatformat:位数 }}

其中,变量名 是您希望格式化的数值,而 位数 则是您想要保留的小数位数,它还可以接受一些特殊的值来控制格式化行为:

  • 不指定 位数 或指定为 0 在这种情况下,floatformat 过滤器会默认尝试保留一位小数。但如果小数部分的末尾为零(例如 34.00),它则会完全移除小数部分,只显示整数。如果小数部分存在非零数字(例如 34.23),它会保留一位小数并进行四舍五入。
  • 正整数 位数 当您提供一个正整数(例如 23)时,floatformat 过滤器会精确地将数字格式化为指定的小数位数。如果原始数字的小数位数不足,它会自动在末尾补零;如果超出,则进行四舍五入。
  • 负整数 位数 这是一个非常实用的特性,当您指定一个负整数时,floatformat 不再是控制小数位数,而是从数字的整数部分末尾向前数,对数字进行四舍五入。例如,floatformat:-2 会将 34234.23 四舍五入到最近的百位,显示为 34200

实用示例

让我们通过几个具体的例子,来深入理解 floatformat 过滤器的实际应用。假设我们有一个商品价格 productPrice,其值可能是 34.2323434.00000

  1. 默认格式化(不指定位数): 当您不指定小数位数时,它会保留一位小数,但会移除末尾的零。

    <p>默认格式化(34.23234):{{ 34.23234|floatformat }}</p>
    <p>默认格式化(34.00000):{{ 34.00000|floatformat }}</p>
    

    显示结果将是:

    默认格式化(34.23234):34.2
    默认格式化(34.00000):34
    
  2. 指定小数位数(正整数): 如果您需要精确控制小数位数,比如保留两位或三位小数,无论原始数字如何,都会按此规则补零或四舍五入。

    <p>保留两位小数(34.23234):{{ 34.23234|floatformat:2 }}</p>
    <p>保留三位小数(34.00000):{{ 34.00000|floatformat:3 }}</p>
    <p>四舍五入到整数(39.56000):{{ 39.56000|floatformat:0 }}</p>
    

    显示结果将是:

    保留两位小数(34.23234):34.23
    保留三位小数(34.00000):34.000
    四舍五入到整数(39.56000):40
    
  3. 使用负整数进行四舍五入: 这个功能在需要将大数字四舍五入到千位、百位时非常有用。

    <p>四舍五入到千位(34234.23):{{ 34234.23|floatformat:-3 }}</p>
    <p>四舍五入到百位(34567.89):{{ 34567.89|floatformat:-2 }}</p>
    

    显示结果将是:

    四舍五入到千位(34234.23):34000
    四舍五入到百位(34567.89):34600
    
  4. 结合 AnQiCMS 实际应用: 假设您的 AnQiCMS 后台在内容模型中为产品定义了一个名为 Price 的自定义数字字段,您可以在产品详情页这样显示它:

    {% archiveDetail productData with name="Price" %}
    <p>产品原价:<span>¥{{ productData|floatformat:2 }}</span></p>
    <p>会员折扣价:<span>¥{{ (productData * 0.85)|floatformat:2 }}</span></p>
    

    这里,我们首先获取了产品的价格,然后不仅格式化了原价,还演示了如何在进行计算(例如八五折)之后,再对结果进行格式化,以确保最终显示的价格始终是两位小数。

注意事项

  • 数据类型兼容性: floatformat 过滤器在 AnQiCMS 中表现出色,它能够智能地处理多种输入类型。无论是 Go 语言中实际的 float64 数值,还是在模板中以字符串形式存在的“浮点数”(例如从某些 API 返回的 "123.45"),它都能进行正确的转换和格式化。
  • 四舍五入规则: 此过滤器执行的是标准的四舍五入(round half up)操作,即如果小数部分刚好是 .5,则向上