[Erl] Stringvariable bearbeiten

Einrichtung, Anschluss und Programmierung der HomeMatic CCU

Moderator: Co-Administratoren

HMNutzer
Beiträge: 708
Registriert: 24.10.2016, 17:18
System: Alternative CCU (auf Basis OCCU)
Hat sich bedankt: 150 Mal
Danksagung erhalten: 22 Mal

[Erl] Stringvariable bearbeiten

Beitrag von HMNutzer » 17.12.2023, 15:08

Servus Scriptkundige,

ich habe eine Systemvariable !POTest als Zahl angelegt. Inhalt ist 0.
Wenn ich die mit dem Befehl

Code: Alles auswählen

string pom = dom.GetObject("!POTest").Value();
auslese, kriege ich den Wert 0.000000.
Ich brauche aber nur den Teil vor dem Komma (kann zwischen -5 und +10 sein).
Mag mir bitte einer die richtige Codezeile schreiben?
Da ich nicht weiß was ich suche half das Blättern in der Scriptdaku auch nix. Der int Befehl war es jedenfalls nicht.
Zuletzt geändert von HMNutzer am 17.12.2023, 22:46, insgesamt 2-mal geändert.
Viele Grüße

Martin

RaspberryMatic auf ESXi 7 mit RPI-RF-MOD/HB-RF-ETH. Div. HM und HMIP Funkkomponenten im Holzständerhaus

Xel66
Beiträge: 14172
Registriert: 08.05.2013, 23:33
System: Alternative CCU (auf Basis OCCU)
Wohnort: Nordwürttemberg
Hat sich bedankt: 588 Mal
Danksagung erhalten: 1501 Mal

Re: Stringvariable bearbeiten

Beitrag von Xel66 » 17.12.2023, 15:12

Die Scriptdoku rät, einfach ein .ToString(0) an das .Value() anzuhängen.

Gruß Xel66

PS. Meist Du wirkli, dass Sonderzeichen in Scriptvariablennamen wirklich eine gute Idee sind? Zumal gerade im Scripting das Ausrufezeichen das Kommentarzeichen ist.
-------------------------------------------------------------------------------------------
524 Kanäle in 146 Geräten und 267 CUxD-Kanäle in 34 CUxD-Geräten:
343 Programme, 334 Systemvariablen und 183 Direktverknüpfungen,
RaspberryMatic Version: 3.65.11.20221005 + Testsystem: CCU2 2.61.7
-------------------------------------------------------------------------------------------
Einsteigerthread, Programmlogik-Thread, WebUI-Handbuch

HMNutzer
Beiträge: 708
Registriert: 24.10.2016, 17:18
System: Alternative CCU (auf Basis OCCU)
Hat sich bedankt: 150 Mal
Danksagung erhalten: 22 Mal

Re: Stringvariable bearbeiten

Beitrag von HMNutzer » 17.12.2023, 15:26

Danke!
Das mit den Sonderzeichen ist sicher ein guter Hinweis; ändere ich wieder ab.
Viele Grüße

Martin

RaspberryMatic auf ESXi 7 mit RPI-RF-MOD/HB-RF-ETH. Div. HM und HMIP Funkkomponenten im Holzständerhaus

mademyday
Beiträge: 272
Registriert: 03.10.2014, 12:46
System: CCU
Wohnort: Enzkreis
Hat sich bedankt: 3 Mal
Danksagung erhalten: 43 Mal

Re: Stringvariable bearbeiten

Beitrag von mademyday » 17.12.2023, 16:11

Xel66 hat geschrieben:
17.12.2023, 15:12
... einfach ein .ToString(0) an das .Value() anzuhängen.
wenn wirklich nur der Teil vor dem Komma interessiert, ist es evtl relevant, dass ToString(0) rundet, während ToInteger() Nachkommastellen abschneidet, Bsp:

Code: Alles auswählen

WriteLine( "-0.6".ToString(0) ); --> -1
WriteLine( "-0.6".ToInteger() ); --> 0
BTW:

Code: Alles auswählen

WriteLine( "-0.3".ToString(0) ); --> -0
"-0" ist auch "nice" :)

[sprotte80]
Beiträge: 336
Registriert: 05.10.2020, 18:37
System: CCU
Hat sich bedankt: 30 Mal
Danksagung erhalten: 25 Mal

Re: Stringvariable bearbeiten

Beitrag von [sprotte80] » 17.12.2023, 18:39

Hi
Xel66 hat geschrieben:
17.12.2023, 15:12
... einfach ein .ToString(0) an das .Value() anzuhängen.
.ToString() ist der voll falsche Weg
mademyday hat geschrieben:
17.12.2023, 16:11
wenn wirklich nur der Teil vor dem Komma interessiert, ist es evtl relevant, dass ToString(0) rundet, während ToInteger() Nachkommastellen abschneidet, Bsp:

Code: Alles auswählen

WriteLine( "-0.6".ToString(0) ); --> -1
WriteLine( "-0.6".ToInteger() ); --> 0
.ToInteger() ist auch nich die Lösung wo auch .ToInteger() rundet

Code: Alles auswählen

real a = 2.999999999999;
WriteLine(a.ToInteger());
Kommt 3 raus

Lösung je nach dem was der TE will String oder Int
bei String einfach vor Punkt abschneiden bei Int einfach mit dem Wert malnehemn.

Thomas
Wenn du keine App zur Bedienung brauchst, dann hast du kein Smarthome, sondern nur eine angefangene Baustelle, oder nur ein unsmartes Autohome.

Homematic-Script - ScriptLexikon für alle
Methoden Konstanten
Hilfe und Infos erwünscht. Alle können mitmachen. Keine Levels. Keine Geheimtuerei.

Tyfys
Beiträge: 551
Registriert: 17.04.2021, 17:12
System: CCU
Hat sich bedankt: 27 Mal
Danksagung erhalten: 125 Mal

Re: Stringvariable bearbeiten

Beitrag von Tyfys » 17.12.2023, 19:11

Noch eine Möglichkeit, die auch nur die Ziffern vor dem Dezimalzeichen ausgibt,
ohne Rundungen :

Code: Alles auswählen

real a = -2.999999999999;
WriteLine(a.Trunc(0).ToString(0));
real a = 15.999999999999;
WriteLine(a.Trunc(0).ToString(0));
Gruß
Harry

[sprotte80]
Beiträge: 336
Registriert: 05.10.2020, 18:37
System: CCU
Hat sich bedankt: 30 Mal
Danksagung erhalten: 25 Mal

Re: Stringvariable bearbeiten

Beitrag von [sprotte80] » 17.12.2023, 19:23

Hi
Tyfys hat geschrieben:
17.12.2023, 19:11
Noch eine Möglichkeit, die auch nur die Ziffern vor dem Dezimalzeichen ausgibt,
ohne Rundungen :

Code: Alles auswählen

real a = -2.999999999999;
WriteLine(a.Trunc(0).ToString(0));
real a = 15.999999999999;
WriteLine(a.Trunc(0).ToString(0));
Ne!!!

Code: Alles auswählen

real a = -2.999999999999999999999999;
WriteLine(a.Trunc(0).ToString(0));
real a = 15.9999999999999999999999;
WriteLine(a.Trunc(0).ToString(0));
Gibt:
-3
16

Thomas
Wenn du keine App zur Bedienung brauchst, dann hast du kein Smarthome, sondern nur eine angefangene Baustelle, oder nur ein unsmartes Autohome.

Homematic-Script - ScriptLexikon für alle
Methoden Konstanten
Hilfe und Infos erwünscht. Alle können mitmachen. Keine Levels. Keine Geheimtuerei.

MichaelN
Beiträge: 9689
Registriert: 27.04.2020, 10:34
System: CCU
Hat sich bedankt: 700 Mal
Danksagung erhalten: 1628 Mal

Re: Stringvariable bearbeiten

Beitrag von MichaelN » 17.12.2023, 19:35

Diese Rundung Fehler sind bei float unvermeidbar und systemimmanent.
LG, Michael.

Wenn du eine App zur Bedienung brauchst, dann hast du kein Smarthome.

Wettervorhersage über AccuWeather oder OpenWeatherMap+++ Rollladensteuerung 2.0 +++ JSON-API-Ausgaben auswerten +++ undokumentierte Skript-Befehle und Debugging-Tipps +++

Tyfys
Beiträge: 551
Registriert: 17.04.2021, 17:12
System: CCU
Hat sich bedankt: 27 Mal
Danksagung erhalten: 125 Mal

Re: Stringvariable bearbeiten

Beitrag von Tyfys » 17.12.2023, 20:30

[sprotte80] hat geschrieben:
17.12.2023, 19:23
Ne!!!
Ja, hast recht.
Das funktioniert so wohl nur bis zu 15 Nachkommastellen.
[sprotte80] hat geschrieben:
17.12.2023, 18:39
bei String einfach vor Punkt abschneiden.
Ich dachte das würde Trunc() machen. Wie machst du das denn ?
[sprotte80] hat geschrieben:
17.12.2023, 18:39
bei Int einfach mit dem Wert malnehemn.
Verstehe ich nicht, gib mal ein Beispiel
MichaelN hat geschrieben:
17.12.2023, 19:35
Diese Rundung Fehler sind bei float unvermeidbar und systemimmanent.
ist natürlich blöd.
Gruß
Harry

HMNutzer
Beiträge: 708
Registriert: 24.10.2016, 17:18
System: Alternative CCU (auf Basis OCCU)
Hat sich bedankt: 150 Mal
Danksagung erhalten: 22 Mal

Re: Stringvariable bearbeiten

Beitrag von HMNutzer » 17.12.2023, 22:45

Servus,

mein Wunsch wurde mit der ersten Antwort erfüllt; die akademische Diskussion danach verstehe ich nicht.
Danke an alle Beteiligten.
Viele Grüße

Martin

RaspberryMatic auf ESXi 7 mit RPI-RF-MOD/HB-RF-ETH. Div. HM und HMIP Funkkomponenten im Holzständerhaus

Antworten

Zurück zu „HomeMatic Zentrale (CCU / CCU2 / CCU3 / Charly)“