split für Ganzzahl vor und nach Komma?

Einrichtung, Anschluss und Programmierung der HomeMatic CCU

Moderator: Co-Administratoren

BDO
Beiträge: 75
Registriert: 14.07.2017, 13:27
Hat sich bedankt: 26 Mal
Danksagung erhalten: 1 Mal

split für Ganzzahl vor und nach Komma?

Beitrag von BDO » 19.10.2021, 14:29

Hallo,
hat jemand eine Idee wie ich die Zahl 3,5 in zwei Variable
var a = 3
var b = 5
aufsplitten kann?
Vielen Dank für Eure Lösung.
Gruß Boris

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

Re: split für Ganzzahl vor und nach Komma?

Beitrag von MichaelN » 19.10.2021, 14:43

Code: Alles auswählen

Var Zahl = 3.5;
Integer a = Floor(Zahl) ;
Integer b = ((Zahl - a) * 10);
b = Floor(b) ; ! Nur für den Fall das Du mehr als 1 Nachkommastellen hast... 
Zuletzt geändert von MichaelN am 19.10.2021, 14:48, insgesamt 1-mal geändert.
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: 550
Registriert: 17.04.2021, 17:12
System: CCU
Hat sich bedankt: 27 Mal
Danksagung erhalten: 125 Mal

Re: split für Ganzzahl vor und nach Komma?

Beitrag von Tyfys » 19.10.2021, 14:43

z.B. so

Code: Alles auswählen

var kommazahl = "3,5"; 
integer vorkomma  =  kommazahl.StrValueByIndex(",", 0);
integer nachkomma =  kommazahl.StrValueByIndex(",", 1);
WriteLine(vorkomma);
WriteLine(nachkomma);

Gruß
Harry
Gruß
Harry

cmjay
Beiträge: 2391
Registriert: 19.09.2012, 10:53
System: CCU
Wohnort: Jottweedee
Hat sich bedankt: 251 Mal
Danksagung erhalten: 351 Mal

Re: split für Ganzzahl vor und nach Komma?

Beitrag von cmjay » 19.10.2021, 14:45

Es kann leider nicht ganz ausgeschlossen werden, dass ich mich irre.
HmIP muss leider draussen bleiben. in Ausnahmefällen erlaubt
ACHTUNG! Per Portweiterleitung aus dem Internet erreichbare CCU-WebUI ist unsicher! AUCH MIT PASSWORTSCHUTZ! Daher: Portweiterleitung deaktivieren!

Benutzeravatar
Roland M.
Beiträge: 9804
Registriert: 08.12.2012, 15:53
System: CCU
Wohnort: Graz, Österreich
Hat sich bedankt: 252 Mal
Danksagung erhalten: 1381 Mal

Re: split für Ganzzahl vor und nach Komma?

Beitrag von Roland M. » 19.10.2021, 14:54

Hallo!

Wenn es nur um eine Nachkommastelle geht, dann ist das einfach:

Code: Alles auswählen

var x = 3.5;
var a = 0 + x; 
var b = 0 + 10.0 * (x - a);

WriteLine("a = " # a);
WriteLine("b = " # b);
Ausgenutzt wird hier die automatische Umwandlung der Typen während der Rechnung.
Alternativ kann man natürlich auch

Code: Alles auswählen

var a = x.ToInteger();
verwenden.

Wenn es beliebige Nachkommastellen sein soll (3.123 -> a=3, b=123) dann müsste man etwas mehr Aufwand treiben. Und die Frage klären, wie bei die sechs Kommastellen beim Typ real behandeln soll: x = 1.234000 -> b=234 oder b=234000.


Roland
Zur leichteren Hilfestellung bitte unbedingt beachten:
  • Bezeichnung (HM-... bzw. HmIP-...) der betroffenen Geräte angeben (nicht Artikelnummer)
  • Kurzbeschreibung des Soll-Zustandes (Was soll erreicht werden?)
  • Kurzbeschreibung des Ist-Zustandes (Was funktioniert nicht?)
  • Fehlermeldungen genau abschreiben, besser noch...
  • Screenshots von Programmen, Geräteeinstellungen und Fehlermeldungen (direkt als jpg/png) einstellen!

-----------------------------------------------------------------------
1. CCU2 mit ~100 Geräten (in Umstellung auf RaspberryMatic-OVA auf Proxmox-Server)
2. CCU2 per VPN mit ~50 Geräten (geplant: RaspberryMatic auf Charly)
3. CCU2 per VPN mit ~40 Geräten (geplant: RaspberryMatic auf CCU3)
CCU1, Test-CCU2, Raspi 1 mit kleinem Funkmodul, RaspberryMatic als VM unter Proxmox, Access Point,...

Benutzeravatar
Roland M.
Beiträge: 9804
Registriert: 08.12.2012, 15:53
System: CCU
Wohnort: Graz, Österreich
Hat sich bedankt: 252 Mal
Danksagung erhalten: 1381 Mal

Re: split für Ganzzahl vor und nach Komma?

Beitrag von Roland M. » 19.10.2021, 15:00

Hallo Harry!
Tyfys hat geschrieben:
19.10.2021, 14:43

Code: Alles auswählen

var kommazahl = "3,5"; 
Wie ich die Frage gelesen habe, soll das eine Zahl sein, kein String. Also noch eine Umwandlung .ToString()

Code: Alles auswählen

integer vorkomma  =  kommazahl.StrValueByIndex(",", 0);
integer nachkomma =  kommazahl.StrValueByIndex(",", 1);
Auch hier wieder: Resultat ist keine integer-Zahl, sondern ein String.
Auch wenn es als integer deklariert ist, es greift die automatische Typenumwandlung.

Und das Trennzeichen ist ein Punkt und kein Komma, wenn man von einer real-Zahl ausgeht.


Roland
Zur leichteren Hilfestellung bitte unbedingt beachten:
  • Bezeichnung (HM-... bzw. HmIP-...) der betroffenen Geräte angeben (nicht Artikelnummer)
  • Kurzbeschreibung des Soll-Zustandes (Was soll erreicht werden?)
  • Kurzbeschreibung des Ist-Zustandes (Was funktioniert nicht?)
  • Fehlermeldungen genau abschreiben, besser noch...
  • Screenshots von Programmen, Geräteeinstellungen und Fehlermeldungen (direkt als jpg/png) einstellen!

-----------------------------------------------------------------------
1. CCU2 mit ~100 Geräten (in Umstellung auf RaspberryMatic-OVA auf Proxmox-Server)
2. CCU2 per VPN mit ~50 Geräten (geplant: RaspberryMatic auf Charly)
3. CCU2 per VPN mit ~40 Geräten (geplant: RaspberryMatic auf CCU3)
CCU1, Test-CCU2, Raspi 1 mit kleinem Funkmodul, RaspberryMatic als VM unter Proxmox, Access Point,...

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

Re: split für Ganzzahl vor und nach Komma?

Beitrag von Tyfys » 19.10.2021, 15:02

@Michael

Funktioniert das so auf CCU3 etc ?
MichaelN hat geschrieben:
19.10.2021, 14:43

Code: Alles auswählen

Integer a = Floor(Zahl) ;
CCU2 akzeptiert nur diese Syntax:

Code: Alles auswählen

integer a = Zahl.Floor() ;
Gruß
Harry
Gruß
Harry

Benutzeravatar
Roland M.
Beiträge: 9804
Registriert: 08.12.2012, 15:53
System: CCU
Wohnort: Graz, Österreich
Hat sich bedankt: 252 Mal
Danksagung erhalten: 1381 Mal

Re: split für Ganzzahl vor und nach Komma?

Beitrag von Roland M. » 19.10.2021, 15:11

Hallo Harry!
Tyfys hat geschrieben:
19.10.2021, 15:02
Funktioniert das so auf CCU3 etc ?
Offensichtlich nein.
Raspberrymatic mag das auch nicht.

CCU2 akzeptiert nur diese Syntax:

Code: Alles auswählen

integer a = Zahl.Floor() ;
Jep.
Resultat ist aber wieder eine Realzahl, kein integer.
Je nach dem, wie du das weiter verarbeiten willst...


Roland
Zur leichteren Hilfestellung bitte unbedingt beachten:
  • Bezeichnung (HM-... bzw. HmIP-...) der betroffenen Geräte angeben (nicht Artikelnummer)
  • Kurzbeschreibung des Soll-Zustandes (Was soll erreicht werden?)
  • Kurzbeschreibung des Ist-Zustandes (Was funktioniert nicht?)
  • Fehlermeldungen genau abschreiben, besser noch...
  • Screenshots von Programmen, Geräteeinstellungen und Fehlermeldungen (direkt als jpg/png) einstellen!

-----------------------------------------------------------------------
1. CCU2 mit ~100 Geräten (in Umstellung auf RaspberryMatic-OVA auf Proxmox-Server)
2. CCU2 per VPN mit ~50 Geräten (geplant: RaspberryMatic auf Charly)
3. CCU2 per VPN mit ~40 Geräten (geplant: RaspberryMatic auf CCU3)
CCU1, Test-CCU2, Raspi 1 mit kleinem Funkmodul, RaspberryMatic als VM unter Proxmox, Access Point,...

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

Re: split für Ganzzahl vor und nach Komma?

Beitrag von Tyfys » 19.10.2021, 15:13

Hallo Roland

Kommt natürlich drauf an, wie der Eingangswert genau ist und was genau als Ergbnis erwartet wird.

Wenn ToString() für den Eingansparameter gebraucht wird,
muss das Trennzeichen für StrValueByIndex() auch auf "." Punkt geändert werden.
Auch wenn es als integer deklariert ist, es greift die automatische Typenumwandlung.
hab ich auf die Schnelle nicht mehr dran gedacht.

Wenn ich das in der Praxis verwende, kontrolliere ich das immer nch mal :mrgreen:


Gruß
Harry
Gruß
Harry

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

Re: split für Ganzzahl vor und nach Komma?

Beitrag von Matsch » 19.10.2021, 15:21

BDO hat geschrieben:
19.10.2021, 14:29
wie ich die Zahl 3,5
Ich würde davon ausgehen, er meint tatsächlich einen Zahlenwert und keine Zeichenkette.
Und ja, in der Scriptsprache wäre der Zahlenwert 3.5

Antworten

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