- Beiträge
- 6.648
- Reaktionspunkte
- 2.340
-> Hier kostenlos registrieren
Ich würde sogar den Vergleich auf >0 bzw <0 noch zusätzlich nach vorne stellen. Dann sieht man nämlich auch noch besser, dass nur dann die ganze Rechnerei von Bedeutung ist:
Ob man bei der Rechnerei jetzt auf 0 oder 0.0 vergleicht, wär' mir egal, da man eh' (Real - DINT) hat.
Aber irgendwie ist der ELSE-Zweig nicht das Gleiche wie oben. Wenn nämlich nSV zufällig eine genau ganze Zahl ist, wird bei Deinem Code auch 0 zugewiesen, was oben (zumindest in dem zu sehenden Auszug) nicht der Fall ist.
Ich hätte mir wahrscheinlich insgesamt eher sowas in der Art hier gebastelt:
Btw, warum gibt's eigentlich die AWL-Funktion RND+ nicht unter SCL? Die wär' ja hier ganz hilfreich gewesen.
Code:
[FONT=Courier New](*Auf nächste ganze Zahl aufrunden*)
IF (nSV > 0.0) AND (nSV - TRUNC(nSV) <> 0.0) THEN // nSV Positiv, aufrunden auf nächstgrössere ganze Zahl
Betrieb_Soll := TRUNC(nSV) + 1;
ELSIF (nSV < 0.0) AND (nSV + TRUNC(nSV) <> 0.0) THEN // nSV Negativ, abrunden auf nächstkleinere ganze Zahl
Betrieb_Soll := TRUNC(nSV) - 1;
ELSE // nSV genau 0.0
Betrieb_Soll := 0;
END_IF;[/FONT]
Aber irgendwie ist der ELSE-Zweig nicht das Gleiche wie oben. Wenn nämlich nSV zufällig eine genau ganze Zahl ist, wird bei Deinem Code auch 0 zugewiesen, was oben (zumindest in dem zu sehenden Auszug) nicht der Fall ist.
Ich hätte mir wahrscheinlich insgesamt eher sowas in der Art hier gebastelt:
Code:
[FONT=Courier New]// Betrag aufrunden (zu erwartende Nachkommastellen beachten!)
Betrieb_Soll:= TRUNC( [/FONT]ABS( nSV ) + 0.99999 )[FONT=Courier New];
// Vorzeichen hinzufügen
Betrieb_Soll:= Betrieb_Soll * SEL( G:= nSV < 0.0, IN0:= 1, IN1:= -1);[/FONT]
Zuletzt bearbeitet: