我目前在python代码中使用Cheetah模板,并且传入了一些浮点数。我想将这些浮点数截断到模板中的两个小数位,例如0.2153406将变成0.21
是否可以在Cheetah模板中这样做:我必须传入已经被截断的字符串吗?
发布于 2014-11-19 06:06:50
我刚刚通过使用#echo的复杂表达式的输出发现了一个解决方案:
#echo '%.2f' % $my_float_var#
这将在变量$my_float_var中打印出只有两个小数位的浮点数。
发布于 2014-11-19 05:53:47
要运行示例,请使用print(“FORMAT”NUMBER(.format));因此,要获得第一个示例的输出,可以运行: print("{:.2f}".format(3.1415926));
将输出
3.14 2 decimal places
发布于 2020-02-20 02:29:18
#echo
可以工作,但是您可以定义自己的filter类来控制格式细节,让您编写更简单的模板。这是一个将浮点数舍入到一定精度的过滤器。
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}
这是一个古老的问题,但之前的答案并没有提到过滤器,尽管格式化占位符是它们的主要目的。
吉姆
https://stackoverflow.com/questions/27009879
复制相似问题