我目前正在将 Cheetah 模板与我的 python 代码一起使用,并且我正在传递一些浮点数。我想将这些浮点数截断到模板中的小数点后两位,例如 0.2153406 将变为 0.21
是否可以在我必须传入已经截断的字符串的 Cheetah 模板中执行此操作?
我刚刚通过使用#echo 的复杂表达式的输出发现了一个解决方案:
#echo '%.2f' % $my_float_var#
这会打印出我在变量 $my_float_var 中的浮点数,只有两位小数。
要运行示例,请使用 print("FORMAT".format(NUMBER)); 因此,要获得第一个示例的输出,您将运行: print("{:.2f}".format(3.1415926));
将输出
3.14 2 decimal places
#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}
这是一个老问题,但早期的答案没有提到过滤器,即使格式化占位符是它们的主要目的。
吉姆