Jinja2 Runde filter nicht Rundung
Ich habe folgenden code in mein template:
data: [{% for deet in deets %} {{ deet.value*100|round(1) }}{% if not loop.last %},{% endif %} {% endfor %}]
Ich gehe davon aus, dass Daten, gerundet auf 1 Dezimalstelle. Allerdings, wenn ich eine Seite oder Quelle, das ist die Ausgabe, die ich bekommen hab:
data: [ 44.2765833818, 44.2765833818, 44.2765833818, 44.2765833818, 44.2765833818, 44.2765833818, 44.2765833818, 44.2765833818, 44.2765833818, 44.2765833818 ]
Dies ist nicht gerundet auf 1 Dezimalstelle. Es läuft ohne ein template-Fehler oder so, aber produziert falsche Ausgabe. Mein Verständnis aus der Dokumentation, und auch eine Verwandte stack overflow Frage, dass mein format sollte funktionieren. Das, was ich bin fehlt oder falsch??
- Es sieht aus wie Sie Ihren code Rundung
100
anstelle des Produkt vondeet.value*100
. Sie sollte wohl lieber zu tun, die Multiplikation im code und nicht in der Vorlage. - Gotcha, ich nehmen Sie Ihren Punkt, aber ich wechselte zu 100*deet.Wert | round(3), und dass es gelöst für mich. Danke!
Du musst angemeldet sein, um einen Kommentar abzugeben.
Können Sie setzen Sie Klammern um den Wert, die Sie abrunden möchten. (Dies funktioniert für die Abteilung als auch, im Gegensatz zu dem, was @sobri schrieb.)
HINWEIS:
round
gibt einefloat
also, wenn Sie wirklich wollen, dieint
Sie müssen übergeben Sie den Wert durch, der filter auch.Nicht erkennen, die der filter-operator hatte Vorrang vor Multiplikation!
Folgenden bis auf bernie ' s Kommentar war, wechselte ich
zu
welche das problem gelöst. Ich Stimme der Verarbeitung passieren soll, in den code woanders, und das wäre eine bessere Praxis.
Lief ich über dieses... benötigt int(mem_total /4) in jinja. Ich löste es, indem es zwei Operationen:
Versuchen, diese
Wenn wir nicht Klammern, Runde tun wird, nur um 100, nicht um das Ergebnis.
Wenn der filter-operator hat Vorrang, dann sollten Sie Runde(3) anstelle der Runde(1) in "{{ 100*deet.Wert|round(1) }}"