Autor Thema: [erledigt]Runden auf Ganzzahl mit ReadingsNum() funktioniert nicht  (Gelesen 4564 mal)

Offline Christoph Morrison

  • Developer
  • Hero Member
  • ****
  • Beiträge: 1793
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.

Zitat
Dass 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.
Gefällt mir Gefällt mir x 1 Liste anzeigen

Offline frober

  • Moderator
  • Sr. Member
  • ***
  • Beiträge: 905
  • Was man nicht kann, kann man lernen...
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.
Zitat
ReadingsNum(q(foo), q(bar), q(Kein Wert), 1);
# = 123.5
nicht # = 123.4 lauten?

Oder habe ich etwas missverstanden?
 
Raspi 3b mit Raspbian Stretch und relativ aktuellem Fhem,  FS20, LGW, PCA301, MySensors mit RS485(CAN-Receiver), etc.,
einiges umgesetzt, vieles in Planung :-)

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

Offline Christoph Morrison

  • Developer
  • Hero Member
  • ****
  • Beiträge: 1793
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.

Offline frober

  • Moderator
  • Sr. Member
  • ***
  • Beiträge: 905
  • Was man nicht kann, kann man lernen...
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 Stretch und relativ aktuellem Fhem,  FS20, LGW, PCA301, MySensors mit RS485(CAN-Receiver), etc.,
einiges umgesetzt, vieles in Planung :-)

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

 

decade-submarginal