que police jinja async africa python flask jinja2 template-engine

python - police - Jinja2 filtro redondo no redondeado



jinja2 que es (3)

¡No me di cuenta de que el operador del filtro tenía prioridad sobre la multiplicación!

Siguiendo el comentario de Bernie, cambié

{{ deet.value*100|round(1) }}

a

{{ 100*deet.value|round(1) }}

que resolvió el problema Estoy de acuerdo en que el procesamiento debería ocurrir en el código en otra parte, y esa sería una mejor práctica.

Tengo el siguiente código en mi plantilla:

data: [{% for deet in deets %} {{ deet.value*100|round(1) }}{% if not loop.last %},{% endif %} {% endfor %}]

Estoy esperando datos redondeados a 1 lugar decimal. Sin embargo, cuando veo la página o fuente, este es el resultado que obtengo:

data: [ 44.2765833818, 44.2765833818, 44.2765833818, 44.2765833818, 44.2765833818, 44.2765833818, 44.2765833818, 44.2765833818, 44.2765833818, 44.2765833818 ]

Esto no se redondea a 1 lugar decimal. Se ejecuta sin un error de plantilla ni nada, pero produce resultados incorrectos. Mi comprensión de la documentación , e incluso una pregunta relacionada con el desbordamiento de la pila , es que mi formato debería funcionar. ¿Qué estoy perdiendo o haciendo mal?


Me encontré con esto ... necesitaba int (mem_total / 4) en jinja. Lo resolví haciendo dos operaciones:

{% set LS_HEAP_SIZE = grains[''mem_total''] / 4 %} {% set LS_HEAP_SIZE = LS_HEAP_SIZE | round | int %}


Puede poner parens alrededor del valor que desea redondear. (Esto también funciona para la división, al contrario de lo que escribió @sobri).

{{ (deet.value/100)|round }}

NOTA: round devuelve un float así que si realmente quieres el int tienes que pasar el valor a través de ese filtro también.

{{ (deet.value/100)|round|int }}