目次
Jinja2で小数点以下を切り捨てる方法
pythonのテンプレートエンジンであるJinja2は簡単に動的htmlを生成できて便利ですが、記法が普通のpythonと異なったり使えない関数があったり多少不便です。
今回は小数点以下を切り捨てる方法を調べて見つからなかったので備忘録です。
小数点以下を切り捨てる方法
//
を利用する
演算子のJinja2では、Pythonと同様に、//
演算子を使用して小数点以下を切り捨てることができます。これはとても単純な方法です。
{% set value = 10.56 %}
{{ value // 1 }}
上記のコードでは、変数valueに対して//演算子を使用することで、小数点以下を切り捨てた値を表示します。
結果は10となります。
カスタムフィルタを作成する
Jinja2では、カスタムフィルタを作成して独自の関数を定義することも可能です。
以下に、小数点以下を切り捨てるカスタムフィルタの例を示します。
まず、Pythonでカスタムフィルタを定義します。
from jinja2 import Environment, FileSystemLoader
def floor_filter(value):
return int(value)
env = Environment(loader=FileSystemLoader('templates'))
env.filters['floor'] = floor_filter
次に、テンプレートでこのカスタムフィルタを使用します。
{% set value = 10.56 %}
{{ value|floor }}
この方法では、valueに対してカスタムフィルタfloorを適用することで、小数点以下を切り捨てた値を表示します。
結果は10となります。
小数点以下を四捨五入する方法
round
フィルタを使用する
Jinja2にはround
フィルタが組み込まれており、このフィルタを使用して小数点以下を切り捨てることができます。
round
フィルタは、精度と丸め方法を指定することで柔軟な丸め処理を行うことができます。
{{ 42.55|round(1) }}
上記のコードでは、変数42.55に対してroundフィルタを使用し、精度を1、小数点以下を四捨五入しています。
結果は42.6となります。
roundフィルタを使用すると、結果は常に浮動小数点数(float)になります。
整数が必要な場合は、さらにintフィルタを使用して整数に変換する必要があります。
{{ 42.55|round|int }}
この方法では、変数42.55を四捨五入した後、整数に変換します。結果は43となります。
カスタムフィルタを作成する
Jinja2では、四捨五入するためのカスタムフィルタを作成することもできます。
from jinja2 import Environment, FileSystemLoader
def round_filter(value, digits=0):
return round(value, digits)
env = Environment(loader=FileSystemLoader('templates'))
env.filters['round'] = round_filter
テンプレートでこのカスタムフィルタを使用します。
{% set value = 10.56 %}
{{ value|round }}
この方法では、valueに対してカスタムフィルタroundを適用することで、小数点以下を四捨五入した値を表示します。
結果は11となります。
小数点以下を切り上げる方法
カスタムフィルタを作成する
Jinja2では、切り上げるためのカスタムフィルタを作成することもできます。
import math
from jinja2 import Environment, FileSystemLoader
def ceil_filter(value):
return math.ceil(value)
env = Environment(loader=FileSystemLoader('templates'))
env.filters['ceil'] = ceil_filter
テンプレートでこのカスタムフィルタを使用します。
{% set value = 10.56 %}
{{ value|ceil }}
この方法では、valueに対してカスタムフィルタceilを適用することで、小数点以下を切り上げた値を表示します。
結果は11となります。
カスタムフィルタがおすすめ
Jinja2で小数点以下の処理を行う方法について解説しました。
簡単な方法としては、jinjaで提供されている処理を使用して小数点以下を切り捨てる方法が使えます。
しかし、思ったよりできることの幅は少ないイメージです。
より高度な方法としてカスタムフィルタを作成して小数点以下を処理すると今後カスタマイズする上でも便利なので、覚えておくといいかもしれません。
参考