Hallo,
wollte mal eine Funktion selbst erstellen und hab mich an das "schöne" Formatieren einer Zahl gemacht. Ergebnis soll sein, dass auf eine vorgegeben Zahl an Nachkommastellen gerundet wird und der ganzzahlige Teil mit Tausenderpunkten getrennt wird. Der aktuelle Stand ist noch mitten in der Entwicklung, sprich ich hab noch jeden kleinen Schritt möglichst als eigene Zeile mit eigener Variable, damit man die Zwischenergebnisse debuggen kann. Und das ganze ist noch weit davon entfernt einen Schönheitspreis zu gewinnen und etliche Konstellationen sind auch noch nicht berücksichtigt.
Aber ich komm an einer Stelle einfach nicht weiter. Hier erst mal der Code:
Aufgerufen mit
Zum Test schreib ich manuell den Wert 1234,56 auf diese GA. Ergebnis im Debugger ist:
round.JPG
Zwei Sachen verstehe ich nicht. Erstens ist "Nachkomma" immer 0, warum
und zweitens: warum ist "ZahlFormat" "0,0", obwohl in ZahlFormat1 ja noch der richtige Wert ("1.234") drin steht?
PS:
Ansatz ist beim Wert das Komma um die gewünschte Anzahl an Nachkommastelln nach rechts zu schieben (Multiplikation mit der 10er Potenz), zu runden, in Text zu wandeln und diesen Text dann in den Teil vor und nach dem gewünschten Komma zu schneiden und dann mit "," dazwischen wieder zusammen zu fügen.
wollte mal eine Funktion selbst erstellen und hab mich an das "schöne" Formatieren einer Zahl gemacht. Ergebnis soll sein, dass auf eine vorgegeben Zahl an Nachkommastellen gerundet wird und der ganzzahlige Teil mit Tausenderpunkten getrennt wird. Der aktuelle Stand ist noch mitten in der Entwicklung, sprich ich hab noch jeden kleinen Schritt möglichst als eigene Zeile mit eigener Variable, damit man die Zwischenergebnisse debuggen kann. Und das ganze ist noch weit davon entfernt einen Schönheitspreis zu gewinnen und etliche Konstellationen sind auch noch nicht berücksichtigt.
Aber ich komm an einer Stelle einfach nicht weiter. Hier erst mal der Code:
Code:
:begin round(x,NKS,TP) :info rundet den Wert x auf NKS Nachkommastellen und fügt ggf. Tausenderpunkte ein. //************************************** //* negative NKS mit Divison einbauen //************************************** Nachkomma=$a$ ZahlFormat1 = $x$ ZahlFormat = $y$ Vorkomma1 = $z$ Vorkomma2 = $q$ Wert1 = convert(x,0.0f32) Wert2 = Wert1 * pow( 10.0f32 , convert(max(NKS,1),0.0f32)) + 0.5f32 Wert3 = convert(Wert2, 0s32) TextZahl =convert(Wert3, $$) Laenge = size(TextZahl) VKS = Laenge - convert(NKS,0u16) Vorkomma = split(TextZahl, 0u16, VKS - 1u16) if size(Vorkomma) > 3u16 then \\ Vorkomma1 = split(Vorkomma, 0u16, size(Vorkomma)-4u16) ;\\ Vorkomma2 = split(Vorkomma, size(Vorkomma)-3u16, size(Vorkomma)-1u16) ;\\ ZahlFormat1 = Vorkomma1 + $.$ + Vorkomma2 \\ endif if size(Vorkomma) <= 3u16 then ZahlFormat1 = Vorkomma endif NKS1 = NKS NKSx = VKS + convert(NKS,0u16) - 1u16 if NKS > 0 then Nachkomma = split(TextZahl, VKS , NKSx ) ; ZahlFormat = ZahlFormat1 + $,$ + Nachkomma endif :return ZahlFormat :end
Code:
round("Aussentemperatur-9/1/1",1,EIN)
round.JPG
Zwei Sachen verstehe ich nicht. Erstens ist "Nachkomma" immer 0, warum
und zweitens: warum ist "ZahlFormat" "0,0", obwohl in ZahlFormat1 ja noch der richtige Wert ("1.234") drin steht?
PS:
Ansatz ist beim Wert das Komma um die gewünschte Anzahl an Nachkommastelln nach rechts zu schieben (Multiplikation mit der 10er Potenz), zu runden, in Text zu wandeln und diesen Text dann in den Teil vor und nach dem gewünschten Komma zu schneiden und dann mit "," dazwischen wieder zusammen zu fügen.
Kommentar