1

我目前正在将 Cheetah 模板与我的 python 代码一起使用,并且我正在传递一些浮点数。我想将这些浮点数截断到模板中的小数点后两位,例如 0.2153406 将变为 0.21

是否可以在我必须传入已经截断的字符串的 Cheetah 模板中执行此操作?

4

3 回答 3

3

我刚刚通过使用#echo 的复杂表达式的输出发现了一个解决方案:

  • #echo '%.2f' % $my_float_var#

这会打印出我在变量 $my_float_var 中的浮点数,只有两位小数。

于 2014-11-19T06:06:50.323 回答
0

要运行示例,请使用 print("FORMAT".format(NUMBER)); 因此,要获得第一个示例的输出,您将运行: print("{:.2f}".format(3.1415926));

将输出

3.14    2 decimal places 
于 2014-11-19T05:53:46.717 回答
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}

这是一个老问题,但早期的答案没有提到过滤器,即使格式化占位符是它们的主要目的。

吉姆

于 2020-02-20T02:29:17.697 回答