(gelöst) Nachkommastellen erzwingen

Begonnen von mi.ke, 20 Februar 2022, 18:56:13

Vorheriges Thema - Nächstes Thema

mi.ke

Moin,

wie kann man mit einer Formatierung einer ganzen Zahl eine Nachkommastelle verpassen?

Also nicht mehr Wert 0, sondern 0.0
0der Wert 1 soll dann 1.0 sein.

Mit sprintf hab ich's nicht hinbekommen.

FHEM 5.9 | RPi4 + 5 x RPi(Z) + FB7590 + FB 6890 LTE via LAN und WAN (VPN) verbunden.
2 x CUL868 + 3 x RFXTRX(e) + 6 x HMwLanGW + 4 x z2tGw + 5 x LGW + 2 x IRBlast + CO2 +++
FS20, FHT, FMS, Elro(mod), CM160, Revolt, LGTV, STV, AVR, withings, HM-sec-*, HM-CC-RT-DN, AMAD, PCA301, arlo, Aqara

betateilchen

-----------------------
Formuliere die Aufgabe möglichst einfach und
setze die Lösung richtig um - dann wird es auch funktionieren.
-----------------------
Lesen gefährdet die Unwissenheit!

mi.ke

genauso hatte ich's gemacht, allerdings die "glatten" Zahlen "x,0" waren immer ohne Nachkomma.


humidity {sprintf("%.0f",ReadingsVal($name,"humidity_Sum",0))},
temperature {sprintf("%.1f",ReadingsVal($name,"temperature_Sum",0))}


Jetzt weiss ich, dass ich auf dem richtigen Weg bin.

Danke Dir!

PS.
Es geht natürlich um die "temperature" aus den oberen Beispiel  8)
FHEM 5.9 | RPi4 + 5 x RPi(Z) + FB7590 + FB 6890 LTE via LAN und WAN (VPN) verbunden.
2 x CUL868 + 3 x RFXTRX(e) + 6 x HMwLanGW + 4 x z2tGw + 5 x LGW + 2 x IRBlast + CO2 +++
FS20, FHT, FMS, Elro(mod), CM160, Revolt, LGTV, STV, AVR, withings, HM-sec-*, HM-CC-RT-DN, AMAD, PCA301, arlo, Aqara

betateilchen

*grübel*

funktioniert es denn nun oder nicht?

Bei mir funktioniert sowohl

{sprintf("%.1f",1)}

als auch

{sprintf("%.1f",1.0)}

absolut korrekt, in beiden Fällen kommt 1.0 als Ergebnis zurück.

Was nicht funktionieren kann, wäre

{sprintf("%.1f",1,0)}

weil perl einen Punkt als Dezimaltrenner verwendet und kein Komma.

Zitat von: mi.ke am 20 Februar 2022, 22:58:37
allerdings die "glatten" Zahlen "x,0" waren immer ohne Nachkomma.

Vermutlich kannst Du das Problem einfach umgehen, indem Du statt mit ReadingsVal() mit ReadingsNum() arbeitest.
-----------------------
Formuliere die Aufgabe möglichst einfach und
setze die Lösung richtig um - dann wird es auch funktionieren.
-----------------------
Lesen gefährdet die Unwissenheit!

mi.ke

wie gesagt, es funktioniert

im Input eingegeben:
{sprintf("%.1f",1)}
ist das Resultat 1.0

Mein Fehler war, dass ich nicht über die Eingabe gegengecheckt, sondern gleich am Syntax gezweifelt habe.

Danke nochmal
FHEM 5.9 | RPi4 + 5 x RPi(Z) + FB7590 + FB 6890 LTE via LAN und WAN (VPN) verbunden.
2 x CUL868 + 3 x RFXTRX(e) + 6 x HMwLanGW + 4 x z2tGw + 5 x LGW + 2 x IRBlast + CO2 +++
FS20, FHT, FMS, Elro(mod), CM160, Revolt, LGTV, STV, AVR, withings, HM-sec-*, HM-CC-RT-DN, AMAD, PCA301, arlo, Aqara