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: 9811
Registriert: 27.04.2020, 10:34
System: CCU
Hat sich bedankt: 711 Mal
Danksagung erhalten: 1656 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: 583
Registriert: 17.04.2021, 17:12
System: CCU
Hat sich bedankt: 29 Mal
Danksagung erhalten: 138 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: 2422
Registriert: 19.09.2012, 10:53
System: CCU
Wohnort: Jottweedee
Hat sich bedankt: 255 Mal
Danksagung erhalten: 363 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: 9901
Registriert: 08.12.2012, 15:53
System: CCU
Wohnort: Graz, Österreich
Hat sich bedankt: 257 Mal
Danksagung erhalten: 1413 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: 9901
Registriert: 08.12.2012, 15:53
System: CCU
Wohnort: Graz, Österreich
Hat sich bedankt: 257 Mal
Danksagung erhalten: 1413 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: 583
Registriert: 17.04.2021, 17:12
System: CCU
Hat sich bedankt: 29 Mal
Danksagung erhalten: 138 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: 9901
Registriert: 08.12.2012, 15:53
System: CCU
Wohnort: Graz, Österreich
Hat sich bedankt: 257 Mal
Danksagung erhalten: 1413 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: 583
Registriert: 17.04.2021, 17:12
System: CCU
Hat sich bedankt: 29 Mal
Danksagung erhalten: 138 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: 5565
Registriert: 30.05.2019, 11:37
System: Alternative CCU (auf Basis OCCU)
Wohnort: Chemnitz
Hat sich bedankt: 120 Mal
Danksagung erhalten: 763 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)“