String in Real umwandeln

Homematic-, TCL- und Shell-Script, Toolchain, C, etc.

Moderator: Co-Administratoren

jp112sdl
Beiträge: 12072
Registriert: 20.11.2016, 20:01
Hat sich bedankt: 846 Mal
Danksagung erhalten: 2138 Mal
Kontaktdaten:

Re: String in Real umwandeln

Beitrag von jp112sdl » 28.11.2020, 09:11

duffy6 hat geschrieben:
27.11.2020, 23:34
Die Berechnung funktioniert leider nicht!
Das Ergebnis lautet dann verbrauch = avg
Ja weil du weiterhin
real verbrauch = (avg/100) * maxleistung * 24 / (heizwert * zustandszahl);

schreibst statt dich an das Beispiel von Baxxy zu halten
real verbrauch = (prozent/100) * maxleistung * 24 / (heizwert * zustandszahl);

VG,
Jérôme ☕️

---
Support for my Homebrew-Devices: Download JP-HB-Devices Addon

Matsch
Beiträge: 5345
Registriert: 30.05.2019, 11:37
System: Alternative CCU (auf Basis OCCU)
Wohnort: Chemnitz
Hat sich bedankt: 113 Mal
Danksagung erhalten: 722 Mal

Re: String in Real umwandeln

Beitrag von Matsch » 28.11.2020, 10:55

Baxxy hat geschrieben:
27.11.2020, 23:31
und richtiger Berechnungszeile:

Code: Alles auswählen

real verbrauch = (prozent/100) * maxleistung * 24 / (heizwert * zustandszahl);
sollte es dann, vorausgesetzt die "Formel" stimmt, passen. :wink:
Hier muß ich dich korrigieren, denn hier findet eine implizite Typkonvertierung statt - mit unerwünschter Ganzzahlrundung. Richtig müßte es heißen:

Code: Alles auswählen

real verbrauch = ((prozent/100.0) * maxleistung * 24.0) / (heizwert * zustandszahl);

jp112sdl
Beiträge: 12072
Registriert: 20.11.2016, 20:01
Hat sich bedankt: 846 Mal
Danksagung erhalten: 2138 Mal
Kontaktdaten:

Re: String in Real umwandeln

Beitrag von jp112sdl » 28.11.2020, 11:59

Matsch hat geschrieben:
28.11.2020, 10:55
mit unerwünschter Ganzzahlrundung.
Echt?
Bei mir passiert das nicht
Bildschirmfoto 2020-11-28 um 11.58.59.png
EDIT: Ist auch so in der Skriptdokumentation beschrieben.
Bildschirmfoto 2020-11-28 um 12.01.54.png
Bildschirmfoto 2020-11-28 um 12.01.54.png (16.65 KiB) 1815 mal betrachtet

VG,
Jérôme ☕️

---
Support for my Homebrew-Devices: Download JP-HB-Devices Addon

Matsch
Beiträge: 5345
Registriert: 30.05.2019, 11:37
System: Alternative CCU (auf Basis OCCU)
Wohnort: Chemnitz
Hat sich bedankt: 113 Mal
Danksagung erhalten: 722 Mal

Re: String in Real umwandeln

Beitrag von Matsch » 28.11.2020, 13:00

Dann gib doch einfach mal die zur Debatte stehende Formel ein, mal so wie erst definiert mit 100 und 24 und danach nochmal mit 100.0 und 24.0 .
Das Ergebnis ist ein ganz anderes.
Typkonvertierung1.jpg
Typkonvertierung2.jpg
Wegen der impliziten Typkonvertierung sollte man immer auch für ganze real-Zahlen "x.0" schreiben. Wahrscheinlich ist das nicht immer notwendig, aber im Ernstfall hilfreich und bewahrt vor der Fehlersuche.

Normalerweise würden bei einer gescheiten Software alle Festkommazahlen implizit in Gleitkommazahlen gewandelt, wenn auch nur eine davon dabei ist oder die Zielvariable eine solche ist. Hier aber passiert das Gegenteil. Ist eine Zahl nicht explizit als Gleitkommazahl niedergeschrieben, wird auch nur noch mit Festkommaalgorithmus weitergerechnet.
Zuletzt geändert von Matsch am 28.11.2020, 13:13, insgesamt 1-mal geändert.

jp112sdl
Beiträge: 12072
Registriert: 20.11.2016, 20:01
Hat sich bedankt: 846 Mal
Danksagung erhalten: 2138 Mal
Kontaktdaten:

Re: String in Real umwandeln

Beitrag von jp112sdl » 28.11.2020, 13:11

Das sind halt so die ReGa-Überraschungen :mrgreen:
Matsch hat geschrieben:
28.11.2020, 13:00
Ist eine Zahl nicht explizit als Gleitkommazahl niedergeschrieben, wird auch nur noch mit Festkommaalgorithmus weitergerechnet.
Ich kenne es aus anderen Bereichen ja auch nur so :wink:

VG,
Jérôme ☕️

---
Support for my Homebrew-Devices: Download JP-HB-Devices Addon

Matsch
Beiträge: 5345
Registriert: 30.05.2019, 11:37
System: Alternative CCU (auf Basis OCCU)
Wohnort: Chemnitz
Hat sich bedankt: 113 Mal
Danksagung erhalten: 722 Mal

Re: String in Real umwandeln

Beitrag von Matsch » 28.11.2020, 13:20

Frage nicht, wie oft mich diese Eigenart schon zur Verzweiflung getrieben hat! Wieso kommt hier ein falscher Wert heraus? :shock:
Seit dem schreibe ich auch alle Konstanten mit einer Null in der Nachkommastelle.

Es hätte ja schon gereicht, die Definition für prozent ohne Nachkomma zu definieren:

Code: Alles auswählen

real prozent = 50;
Dann würde diese Variable im weiteren als Festkommazahl behandelt und das Ergebnis wäre "0".

jp112sdl
Beiträge: 12072
Registriert: 20.11.2016, 20:01
Hat sich bedankt: 846 Mal
Danksagung erhalten: 2138 Mal
Kontaktdaten:

Re: String in Real umwandeln

Beitrag von jp112sdl » 28.11.2020, 13:33

Die Typdeklarationen sind eh für'n Garten,

Code: Alles auswählen

real a = "TEST";
WriteLine(a);
deshalb schreibe ich in Skripten nur noch "var" und achte dann bei der Zuweisung darauf, welchen Typ ich möchte.

In der Skriptdokumentation selbst wird empfohlen, 0.0 zu addieren, um Gleikomma zu "erzwingen"

VG,
Jérôme ☕️

---
Support for my Homebrew-Devices: Download JP-HB-Devices Addon

alchy
Beiträge: 10744
Registriert: 24.02.2011, 01:34
System: CCU
Hat sich bedankt: 65 Mal
Danksagung erhalten: 671 Mal

Re: String in Real umwandeln

Beitrag von alchy » 28.11.2020, 18:04

Baxxy hat geschrieben:
27.11.2020, 23:33
Matsch hat geschrieben:
27.11.2020, 23:28
Frage mich gerade, was herauskommt, wenn man einen String durch 100 teilt.
Auf jeden Fall nichts stringentes. :mrgreen:

Code: Alles auswählen

string avg ="120";
var rechnung = avg/100;
rechnung ist dann vom Typ String und im Beispiel 120. So will es die Rega.
jp112sdl hat geschrieben:
28.11.2020, 13:33
Die Typdeklarationen sind eh für'n Garten,
durch die automatische Typumwandlung ist das ja auch gar nicht möglich.

Alchy

Blacklist................... almost full
Ignoranz ist die Summe aller Maßnahmen die man ergreift, um bestehende Tatsachen nicht sehen zu müssen.

© Sandra Pulsfort (*1974)

Lies bitte die Logik von WebUI Programmen und die Tipps und Tricks für Anfänger.

Wichtig auch CUxD ersetzt System.exec. Die HM Script Doku (Downloadart Skripte) hilft auch weiter.
Zum Testen von Scripten den >> HomeMatic Script Executor << von Anli benutzen.

duffy6
Beiträge: 184
Registriert: 14.03.2017, 10:29
Hat sich bedankt: 29 Mal
Danksagung erhalten: 1 Mal

Re: String in Real umwandeln

Beitrag von duffy6 » 01.12.2020, 15:49

Ich komm nicht mit!

Ich will doch nur mit einem Wert, den ich mittels curl abhole weiterrechnen:

Code: Alles auswählen

string avg;
system.Exec("curl 'http://192.168.133.102:8091/query/text.gy?dp=294&b=-1M&ag=avg'", &avg); ! Wert aus CCU-Homematic holen
WriteLine("Wert aus CCU-Historian: "#avg);
! Zur Info: avg wird mit 21.732221897909106 zurückgeleifert
real rechnung = avg/100;
WriteLine("Ergebnis: "#rechnung);
Leider liefert dies aber das folgende Ergebnis:

Code: Alles auswählen

Wert aus CCU-Historian: 21.732221897909106
Ergebnis: 21.732221897909106
Frage1: Wieso kann ich avg nicht mit 100 dividieren?
Frage2: Wie muss es richtig heißen, dass ich 0.2173 als Ergebnis bekomme?
——-
Raspberrymatic auf einem Raspi 3B, Funkmodul HM-MOD-RPI-PCB

alchy
Beiträge: 10744
Registriert: 24.02.2011, 01:34
System: CCU
Hat sich bedankt: 65 Mal
Danksagung erhalten: 671 Mal

Re: String in Real umwandeln

Beitrag von alchy » 01.12.2020, 16:02

duffy6 hat geschrieben:
01.12.2020, 15:49
! Zur Info: avg wird mit 21.732221897909106 zurückgeleifert
avg ist aber ein string. Und mit strings rechnet es sich schlecht.
Du musst diesen also erstmal wandeln.

Code: Alles auswählen

real rechnung = avg.ToFloat()/100.0;
WriteLine("Ergebnis: "#rechnung);
Alchy

Blacklist................... almost full
Ignoranz ist die Summe aller Maßnahmen die man ergreift, um bestehende Tatsachen nicht sehen zu müssen.

© Sandra Pulsfort (*1974)

Lies bitte die Logik von WebUI Programmen und die Tipps und Tricks für Anfänger.

Wichtig auch CUxD ersetzt System.exec. Die HM Script Doku (Downloadart Skripte) hilft auch weiter.
Zum Testen von Scripten den >> HomeMatic Script Executor << von Anli benutzen.

Antworten

Zurück zu „Softwareentwicklung für die HomeMatic CCU“