[erledigt]Runden auf Ganzzahl mit ReadingsNum() funktioniert nicht

Begonnen von frober, 25 Dezember 2020, 13:07:29

Vorheriges Thema - Nächstes Thema

Christoph Morrison

Zitat von: Beta-User am 30 Juli 2021, 08:51:26
Manöverkritik: Evtl. hätte man in der commandref noch klarstellen können, dass das nur bis zu Ganzzahlen bzw. hinter dem Komma klappt:
"Echtes runden" (mit Math::round, z.B.) müsste nach meinem Verständnis auch vor dem Komma greifen.
Ob der "Trick" mit sprintf nun "gut" ist, sei mal dahingestellt, das findet sich jedenfalls häufiger als Empfehlung für Rundungen.

Ich hatte einen Satz dazu auf die Wiki-Seite geschrieben und nun noch Beispiele eingefügt. Die meisten gucken für sowas eh nicht in die CRef, sondern ins Wiki.

ZitatDass man da auch einen Text zurückgeben kann, ist schon klar, und den "Königsweg" in der Darstellung kenne ich auch nicht. MAn. ist es nur auch nicht optimal, nur Text darzustellen, denn vermutlich kommt dann irgendwann wieder einer mit dem Hinweis, dass das ggf. Warnings verursacht, weil er einen nichtnummerischen Vergleich vornimmt...

Hab mal noch zwei Fallstricke angemerkt, einer davon ist das.

frober

Zitat von: Christoph Morrison am 30 Juli 2021, 13:16:41
Ich hatte einen Satz dazu auf die Wiki-Seite geschrieben und nun noch Beispiele eingefügt. Die meisten gucken für sowas eh nicht in die CRef, sondern ins Wiki.

Hab mal noch zwei Fallstricke angemerkt, einer davon ist das.

Ich habe nochmal übers Wiki gelesen, müsste das Bsp.
ZitatReadingsNum(q(foo), q(bar), q(Kein Wert), 1);
# = 123.5
nicht # = 123.4 lauten?

Oder habe ich etwas missverstanden?

Raspi 3b mit Raspbian Bullseye und relativ aktuellem Fhem,  FS20, LGW, PCA301, Zigbee, MQTT, MySensors mit RS485(CAN-Receiver) und RFM69, etc.,
einiges umgesetzt, vieles in Planung, smile

********************************************
...man wächst mit der Herausforderung...

Christoph Morrison

Zitat von: frober am 30 Juli 2021, 15:32:46
Ich habe nochmal übers Wiki gelesen, müsste das Bsp.nicht # = 123.4 lauten?
Oder habe ich etwas missverstanden?

Nein wieso? sprintf rundet ja schon, formatiert aber eben auch, insbesondere wenn die Rundungslänge länger ist als die Anzahl der Nachkommastellen. Das macht den gewählten Mechanismus, neben dem Problem mit der format string injection und dem gemischten Rückgabewert, auch problematisch.

frober

Zitat von: Christoph Morrison am 30 Juli 2021, 17:21:37
Nein wieso? sprintf rundet ja schon, formatiert aber eben auch, insbesondere wenn die Rundungslänge länger ist als die Anzahl der Nachkommastellen. Das macht den gewählten Mechanismus, neben dem Problem mit der format string injection und dem gemischten Rückgabewert, auch problematisch.

OK, danke für die Erläuterung.
Ich dachte, die nicht gewünschten Stellen werden einfach abgeschnitten.
Dann passt es soweit.
Raspi 3b mit Raspbian Bullseye und relativ aktuellem Fhem,  FS20, LGW, PCA301, Zigbee, MQTT, MySensors mit RS485(CAN-Receiver) und RFM69, etc.,
einiges umgesetzt, vieles in Planung, smile

********************************************
...man wächst mit der Herausforderung...