FHEM > Perl für FHEM-User

[gelöst] ReadingsNum rechnet anders als erwartet

(1/2) > >>

FHEMAN:
Hi, ich konnte in Commandref und Wiki keine weiteren Details zu ReadingsNum finden. Ich habe festgestellt, dass ReadingsNum - ReadingsNum teils ein falsches Ergebnis liefert:

--- Code: ---1. ReadingsNum("","", 11.2) - ReadingsNum("","", 11.1)
= 0.0999999999999996 //falsch
2. ReadingsNum("","", 1.2) - ReadingsNum("","", 1.1)
= 0.0999999999999996 //falsch
3- ReadingsNum("","", 0.2) - ReadingsNum("","", 0.1)
= 0.1 //richtig
--- Ende Code ---
Das Ganze natürlich auch mit echten Readings.

Könnt ihr mir sagen, ob das ein Bug ist oder ich etwas übersehe?
Als Workaround mit dem Round-Parameter zu arbeiten wäre suboptimal, zumal die Default-Werte hier nicht berücksichtigt werden (nach meinem Verständnis).

Einen schönen Abend
Ronny

Otto123:
Hallo Ronny,

versuch mal  ;)
--- Code: ---{11.2 - 11.1}
--- Ende Code ---
Das hat nichts mit ReadingsNum zu tun, das ist die "ganz normale" Zahlendarstellung der digitalen Gleitkommaarithmetik. Wirst Du außer beim Taschenrecher sicher immer finden.
sprintf hilft Dir bei der finalen Darstellung nach Deinen Wünschen.
Beispiel:

--- Code: ---{sprintf "%.2f", 11.2 - 11.1}
--- Ende Code ---


Gruß Otto

Christoph Morrison:

--- Zitat von: Otto123 am 24 Oktober 2021, 21:04:16 ---sprintf hilft Dir bei der finalen Darstellung nach Deinen Wünschen.
Beispiel:

--- Code: ---{sprintf "%.2f", 11.2 - 11.1}
--- Ende Code ---

--- Ende Zitat ---

Was identisch zum round-Parameter ist ;-)

Otto123:
Naja nicht wirklich wenn man die Aufgabe vom TE nimmt :)

--- Code: ---{ReadingsNum("","", 1.2,1) - ReadingsNum("","", 1.1,1)}
--- Ende Code ---
Er wollte ja das Ergebnis von ReadingsNum() - ReadingsNum() "richtig". Oder ich habe den "Round - Parameter" nicht verstanden.

FHEMAN:
Ich nutze Fhem natürlich nur als Taschenrechner  ;)


--- Zitat von: Otto123 am 24 Oktober 2021, 22:14:59 ---Naja nicht wirklich wenn man die Aufgabe vom TE nimmt :)

--- Code: ---{ReadingsNum("","", 1.2,1) - ReadingsNum("","", 1.1,1)}
--- Ende Code ---
Er wollte ja das Ergebnis von ReadingsNum() - ReadingsNum() "richtig". Oder ich habe den "Round - Parameter" nicht verstanden.

--- Ende Zitat ---
Round wirkt sich nicht auf die angegebenen Default Values von ReadingsNum aus. Gänzlich sauber ist das nicht.

Navigation

[0] Themen-Index

[#] Nächste Seite

Zur normalen Ansicht wechseln