Multiplizieren funktioniert nicht

Einrichtung, Anschluss und Programmierung der HomeMatic CCU

Moderator: Co-Administratoren

microsuck
Beiträge: 220
Registriert: 03.09.2012, 15:34
Hat sich bedankt: 3 Mal
Danksagung erhalten: 9 Mal

Multiplizieren funktioniert nicht

Beitrag von microsuck » 13.03.2022, 17:36

Hi,

Bin in Skriptschreiben nicht gerade ein Experte aber trotzdem versuche ich mich immer wieder daran. Nun bin gerade dabei etwas rumzubasteln und wollte ein neues Projekt angehen. Hierzu habe ich mal ganz einfach versucht den Inhalt eines Tank zu berechnen.

Hier das Script:

Code: Alles auswählen

real tank_laenge = 3500;
real tank_breite = 1250;
real tank_hoehe = 1500;

real tank_leer = tank_laenge * tank_breite * tank_hoehe;
WriteLine(tank_leer);

Die Variable tank_leer zeigt mir den Wert -2027434592 an.

Warum was mache ich falsch?

Laut diesem Beitrag https://homematicblog.de/homematic-scri ... d-aktoren/ sollte es doch so funktionieren.

Danke
Zuletzt geändert von Roland M. am 13.03.2022, 19:17, insgesamt 1-mal geändert.
Grund: Thema verschoben

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

Re: Multiplizieren funktioniert nicht

Beitrag von MichaelN » 13.03.2022, 17:44

Die Zahlen werden als integer interpretiert und das Ergebnis überschreitet den zulässigen Werte Bereich.

Häng ".0" an die Zahlen und es wird funktionieren.
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 +++

Benutzeravatar
stan23
Beiträge: 2042
Registriert: 13.12.2016, 21:14
System: Alternative CCU (auf Basis OCCU)
Wohnort: Altmühltal
Hat sich bedankt: 586 Mal
Danksagung erhalten: 338 Mal
Kontaktdaten:

Re: Multiplizieren funktioniert nicht

Beitrag von stan23 » 13.03.2022, 17:51

Du hast zwar die Variablen als real angegeben, aber die Skriptsprache nimmt trotzdem Integer.

3500 * 1250 * 1500 = 6562500000 = 0x1.8727.CDA0

In 64 Bit passt aber nur 0x8728.CDA0 und das sind bei einem vorzeichenbehafteten Integer eben -2.027.434.592

edit: viel zu langsam getippelt...
Viele Grüße
Marco

RaspberryMatic als VM auf einem NUC mit Proxmox und USB-Funkmodul
~80 Geräte (HM, HmIP, HMW, HBW, AskSin)

microsuck
Beiträge: 220
Registriert: 03.09.2012, 15:34
Hat sich bedankt: 3 Mal
Danksagung erhalten: 9 Mal

Re: Multiplizieren funktioniert nicht

Beitrag von microsuck » 13.03.2022, 17:56

Super Danke für die schnelle Rückantwort

gibt es eine Möglichkeit ohne .0 zu multiplizieren bzw. wie kann ich dies am elegantesten Lösen. Mit .0 an jeder Zahl bekomme ich dann 6562500000.000000 als Ergebnis.

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

Re: Multiplizieren funktioniert nicht

Beitrag von Tyfys » 13.03.2022, 18:05

Wenn du als Ergebnis Kubikmeter erwartest. musst du auch
die Ausgangsmasse in Metern angeben.
also 3.5 * 1.26 * 1.5 = 6.5625

Wenn du es dann in Litern willst die cbm dann mit 1000 multiplizieren
= 6562.5 l
Gruß
Harry

Benutzeravatar
stan23
Beiträge: 2042
Registriert: 13.12.2016, 21:14
System: Alternative CCU (auf Basis OCCU)
Wohnort: Altmühltal
Hat sich bedankt: 586 Mal
Danksagung erhalten: 338 Mal
Kontaktdaten:

Re: Multiplizieren funktioniert nicht

Beitrag von stan23 » 13.03.2022, 18:12

microsuck hat geschrieben:
13.03.2022, 17:56
6562500000.000000 als Ergebnis.
Das ist ja auch richtig:
etwas mehr als 6,5 Milliarden. Die Einheit ist vermutlich Kubikmillimeter 8)
Viele Grüße
Marco

RaspberryMatic als VM auf einem NUC mit Proxmox und USB-Funkmodul
~80 Geräte (HM, HmIP, HMW, HBW, AskSin)

microsuck
Beiträge: 220
Registriert: 03.09.2012, 15:34
Hat sich bedankt: 3 Mal
Danksagung erhalten: 9 Mal

Re: Multiplizieren funktioniert nicht

Beitrag von microsuck » 13.03.2022, 18:15

mich stören die .000000 am Schluß

paul53
Beiträge: 2554
Registriert: 26.04.2012, 20:42
Wohnort: Berlin
Danksagung erhalten: 15 Mal

Re: Multiplizieren funktioniert nicht

Beitrag von paul53 » 13.03.2022, 18:17

Tyfys hat geschrieben:
13.03.2022, 18:05
Wenn du es dann in Litern willst die cbm dann mit 1000 multiplizieren
... oder die Maße in dm angeben: 35 * 12.5 * 15.
Versionen: HM-CC-TC 2.1, HM-LC-Sw1 1.9, HM-CC-RT-DN 1.1, HM-MOD-RPI-PCB 1.2.1 (keine CCU)

microsuck
Beiträge: 220
Registriert: 03.09.2012, 15:34
Hat sich bedankt: 3 Mal
Danksagung erhalten: 9 Mal

Re: Multiplizieren funktioniert nicht

Beitrag von microsuck » 13.03.2022, 18:25

noch ein weiteres Problem habe ich

Code: Alles auswählen

real sensor = dom.GetObject("hohe").Value().ToString(1);
WriteLine(sensor);

! der Wert Sensor ist z.B. 161.3

real test1 = (tank_laenge * tank_breite * sensor) / 1000;
Ergebnis 43.750000 der Wert Sensor wird ignoriert.


Warum das? Irgendwie könnte es so einfach sein wenn ich die Logik verstehen würde.

Danke

Benutzeravatar
HM-Villa
Beiträge: 512
Registriert: 24.01.2022, 10:13
System: CCU
Hat sich bedankt: 29 Mal
Danksagung erhalten: 120 Mal

Re: Multiplizieren funktioniert nicht

Beitrag von HM-Villa » 13.03.2022, 18:31

Weil Du mit ".ToString(1)" eine Zeichenkette aus der Variable sensor machst und mit der rechnet es nicht.

Wie man Ausgaben formatiert, hast Du ja offensichtlich schon heraus gefunden. Die Eingaben zum irgendwas rechnen muss aber aber dann nicht auch noch formatieren.
Zuletzt geändert von HM-Villa am 13.03.2022, 18:35, insgesamt 2-mal geändert.
______________________________________________________
950 Kanäle in 201 Geräten und 39 CUxD-Kanäle in 5 CUxD-Geräten

Antworten

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