Python 如何在cheetah模板中将浮点值截断为小数点后两位?
我目前在python代码中使用Cheetah模板,并传入了一些浮点数。我想在模板中将这些浮点值截断为小数点后两位,例如,0.2153406将变成0.21 是否可以在Cheetah模板中执行此操作?我是否必须传入已截断的字符串?要运行示例,请使用print(“FORMAT.”FORMAT(NUMBER)); 因此,要获得第一个示例的输出,您需要运行:print(“{.2f}”).format(3.1415926) 将输出Python 如何在cheetah模板中将浮点值截断为小数点后两位?,python,templates,cheetah,Python,Templates,Cheetah,我目前在python代码中使用Cheetah模板,并传入了一些浮点数。我想在模板中将这些浮点值截断为小数点后两位,例如,0.2153406将变成0.21 是否可以在Cheetah模板中执行此操作?我是否必须传入已截断的字符串?要运行示例,请使用print(“FORMAT.”FORMAT(NUMBER)); 因此,要获得第一个示例的输出,您需要运行:print(“{.2f}”).format(3.1415926) 将输出 3.14 2 decimal places 我刚刚通过使用#ech
3.14 2 decimal places
我刚刚通过使用#echo:
#echo“%.2f”%$my\u float\u var#
\echo
可以工作,但您可以定义自己的筛选器类来控制格式细节,从而编写更简单的模板。这是一个过滤器,它可以将浮动旋转到一定的精度
import Cheetah.Filters
class MyFilter(Cheetah.Filters.Filter):
"""
Overrides filtering to control the number of digits output for
floats.
"""
def filter(self,val,numDigits=2,**kw):
"""
Called each time a top level placeholder is to be
formatted for output.
"""
if isinstance(val,float):
return f"{val:.{numDigits}f}"
return super().filter(val,**kw)
若要使用此自定义筛选器,请在创建模板时指定它。这里有一条路
cls=Cheetah.Template.Template.compile(tmpl)
print(cls(filter=MyFilter))
您还可以向筛选函数添加自定义参数,如上例中的numDigits
。要指定该值,必须在占位符中使用长格式
#import math
π to two digits is $math.pi
π to ten digits is ${math.pi,numDigits=10}
这是一个老生常谈的问题,但之前的答案没有提到过滤器,尽管格式化占位符是它们的主要用途
吉姆