在Jekyll / Liquid中落后于零

时间:2016-06-16 14:30:32

标签: jekyll liquid

我有一个看起来像这样的前线:

products:
- item: item name
  price: 39.50
- item: item number two
  price: 12.50

如何在尾随零的液体中输出这些变量?

请注意{{ products[0].price }}将输出39.5。我需要输出39.50

3 个答案:

答案 0 :(得分:5)

我确信你可以使用一系列过滤器一起破解它,但一个快速而愚蠢的解决方案是简单地将price包装在引号中,使其成为字符串值而不是数字值。在这种情况下,它将完全按照您输入的方式出现,包括任何尾随零。

products:
- item: item name
  price: "39.50"
- item: item number two
  price: "12.50"

如果您需要使用数值进行处理,可以使用两个变量:价格的数字值和价格标签的字符串值。

products:
- item: item name
  price: 39.50
  priceLabel: "39.50"
- item: item number two
  price: 12.50
  priceLabel: "12.50"

答案 1 :(得分:5)

这将是一种方法,分多步执行:

  • 舍入数字N个小数位(例如2),因此小数的大小均匀;
  • 用小数分隔符分割数字,这样就得到一个包含两个元素的数组,元素0上的积分部分和元素1上的小数部分;
  • 将N个尾随零附加到小数部分,并将字符串截断为N,这样就可以得到N个小数。
{% assign price_split = page.products[0].price | round: 2 | split: "." %}
{% assign integral = price_split[0] %}
{% assign fractional = price_split[1] | append: "00" | truncate: 2, "" %}

Formatted Price: {{ integral }}.{{ fractional }}

答案 2 :(得分:2)

我知道这是一个比较老的问题,但是您可以为此创建一个自定义过滤器。

module Jekyll
  module PrecisionFilter
    def precision(input, value=0)
      ("%.#{value}f" % input)
    end
  end
end

Liquid::Template.register_filter(Jekyll::PrecisionFilter)

将其另存为_plugins/precision_filter.rb并重新启动jekyll服务器(如果正在运行)。它将使您能够对像这样的数字设置精度,

{{ price | precision: 2 }}