Manchmal machen gerade erschwerte Bedingungen eine Aufgabenstellung spannend und interessant. Beispielsweise dann wenn einem nicht der gesamte Funktionsumfang einer Programmiersprache zur Verfügung steht und das dann auch noch in einer altbackenen Programmiersprache wie PASCAL 😀
So brauchte ich für die Verarbeitung in einer weiteren Funktion die Info darüber, ob eine Zahl Dezimalstellen hat oder nicht. Leider stand in der Programmumgebung nur die Funktion „Format“ zur Verfügung und diese auch noch nur eingeschränkt. Warum das so ist weiß ich nicht, ist auch ein bisschen schwer zu erklären was das für ein Gewurschtel ist 😀
Letzt endlich habe ich es mit folgendem „Trick“ geschafft doch ans Ziel zu gelangen. Den folgenden Code habe ich versucht in „richtigem“ Pascal nachzubauen, da es sich bei dem Code des Programms, dass ich modifiziert habe, auch nur um eine an PASCAL-angelehnte Sprache/Syntax handelt:
1 2 3 |
zahl1 := 5.2; zahl2 := Format("%.2f",zahl1); zahl3 := Format("%.0f",zahl1); |
Was habe ich hier gemacht? Ich habe mir die Zahl, die irgendwo herkommt, in zwei Variablen geschrieben und dabei „umformatiert“. Einmal als normale Dezimalzahl mit 2 Nachkommastellen ( %.2f ), was vermutlich nicht unbedingt nötig ist, da die Zahl so schon vorlag, und ein weiteres Mal als auf- bzw. abgerundete Zahl ohne Dezimalstellen ( %.0f ).
In dem Beispiel würden sich folgende Werte ergeben:
zahl2 = 5.2
zahl3 = 5
Wenn man nun zahl3 von zahl2 abzieht erhält man nur noch den Wert hinter dem Komma, in diesem Beispiel 0,2. Der Wert kann auch ins Negative rutschen, beispielsweise so:
zahl2 = 5.8
zahl3 = 6
Das Ergebnis der Berechnung wäre in diesem Fall -0,2. Das macht allerdings für die Aufgabenstellung nichts.
Da es in der Umgebung, in der ich mich befand, die Möglichkeit gibt ein „iif“ zu verwenden, sah es zum Schluss so aus:
1 2 3 |
ergebnis := zahl2 - zahl3; iif(ergebnis<0, call(blabla),) iif(ergebnis>0, call(blabla),) |
Durch eine Prüfung ob das Ergebnis der durchgeführten Berechnung von 0 abweicht konnte man nun herausfinden, ob es sich bei der ursprünglichen Zahl um eine Dezimalzahl handelt. Wenn dies nicht der Fall ist, geht die Rechnung logischerweise immer mit einer 0 auf.
Done 😀