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