2013-07-30 43 views
7

Tôi đã đoạn mã sau trong mẫu của tôi:Jinja2 lọc tròn không làm tròn

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

Tôi hy vọng dữ liệu được làm tròn đến 1 chữ số thập phân. Tuy nhiên, khi tôi xem trang hoặc nguồn, đây là kết quả tôi nhận được:

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

Điều này không được làm tròn đến 1 chữ số thập phân. Nó chạy mà không có một lỗi mẫu hoặc bất cứ điều gì, nhưng sản lượng không chính xác. Sự hiểu biết của tôi from the documentation và thậm chí là a related stack overflow question, là định dạng của tôi sẽ hoạt động. Tôi đang thiếu hoặc làm gì sai?

+0

Có vẻ như mã của bạn đang làm tròn '100' thay vì ** sản phẩm ** của' deet.value * 100'. Bạn có lẽ nên thích làm phép nhân trong mã của bạn, và không phải trong mẫu. – bernie

+0

Gotcha, tôi lấy điểm của bạn, nhưng tôi đã chuyển sang 100 * deet.value | vòng (3) và giải quyết nó cho tôi. Cảm ơn! – Mittenchops

Trả lời

7

Không nhận ra toán tử bộ lọc có ưu tiên hơn phép nhân!

Theo dõi trên bình luận bernie, tôi chuyển sang

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

để

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

mà giải quyết được vấn đề. Tôi đồng ý việc xử lý sẽ xảy ra trong mã ở nơi khác, và đó sẽ là thực hành tốt hơn.

+0

Điều này rõ ràng không hoạt động đối với phân chia. Trong trường hợp đó, Jinja không có khả năng làm tròn kết quả. Tôi không đồng ý với ý tưởng rằng toán học nên được thực hiện trong bộ điều khiển thay vì xem. Đó là một mùi hôi đeo mặt nạ như một mùi thơm ngon. – sobri

18

Bạn có thể đặt các giá trị xung quanh giá trị mà bạn muốn làm tròn. (Điều này làm việc cho bộ phận là tốt, trái với những gì @sobri viết.)

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

LƯU Ý: round trả về một float vì vậy nếu bạn thực sự muốn int bạn phải vượt qua các giá trị thông qua bộ lọc là tốt.

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

Tôi chạy qua ... int (mem_total/4) cần thiết trong jinja. Tôi đã giải quyết nó bằng cách thực hiện hai thao tác:

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