Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Jinja2 round filter not rounding

I have the following code in my template:

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

I am expecting data rounded to 1 decimal place. However, when I view the page or source, this is the output I'm getting:

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

This is not rounded to 1 decimal place. It runs without a template error or anything, but produces incorrect output. My understanding from the documentation, and even a related stack overflow question, are that my format should work. What am I missing or doing wrong?

like image 786
Mittenchops Avatar asked Jul 30 '13 21:07

Mittenchops


2 Answers

You can put parens around the value that you want to round. (This works for division as well, contrary to what @sobri wrote.)

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

NOTE: round returns a float so if you really want the int you have to pass the value through that filter as well.

{{ (deet.value/100)|round|int }} 
like image 190
John R Avatar answered Sep 23 '22 02:09

John R


Didn't realize the filter operator had precedence over multiplication!

Following up on bernie's comment, I switched

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

to

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

which solved the problem. I agree the processing should happen in the code elsewhere, and that would be better practice.

like image 34
Mittenchops Avatar answered Sep 23 '22 02:09

Mittenchops