如何在浮雕模板中将浮点数截断为两位小数?

时间:2014-11-19 05:49:08

标签: python templates cheetah

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

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

3 个答案:

答案 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}

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

吉姆