View Full Version : Rechenproblem im/mit ILE
Hallo,
wir haben V5R4
wenn ich folgende Berechnung in einem ILE Pgm mache,
D Test S 9 3
C Eval Test = ((49 / 7) / (12 / 6))dann sollte doch das Feld Test den Wert 3,5 enthalten oder?
ILE berechnet mir hier aber folgenden Wert 3,0
Hat irgend jemand eine Erklärung für mich
... works as designed: es wird Ganzzahl Arithmetrik verwendet, da die erste Berechnung rein Ganzzahlig ist und zuletzt (die Zuweisung hat die niedrigste Priorität) an eine Zahl mit drei Nachkommastellen zugewiesen, was das zuschwindeln der 0 bewirkt.
Konsequenz: nie Literale und (und in RPG auch keine Konstanten) in Rechnungen verwenden und geschachtelte Ausdrücke eher vermeiden.
D*B
Hallo,
wir haben V5R4
wenn ich folgende Berechnung in einem ILE Pgm mache,
D Test S 9 3
C Eval Test = ((49 / 7) / (12 / 6))dann sollte doch das Feld Test den Wert 3,5 enthalten oder?
ILE berechnet mir hier aber folgenden Wert 3,0
Hat irgend jemand eine Erklärung für mich
Hallo!
Ich hatte ein ähnliches Problem. Ich wollte in einem RPG-Programm eine Prozentzahl ermitteln und rechnete " / 100". Hierbei gab es ebenfalls Probleme mit Nachkommastellen. Ich habe mit angewöhnt bei solchen Berechnungen immer den EVAL (R) zu verwenden.
Nähere Infos findest Du im RPG-Handbuch für V5R4 (SC09-2508-06) unter "Precision Rules for Numeric Operations" ab Seite 448.
Hallo,
die Angabe des Schlüssel-Wortes ExprOpts(*ResDecPos) (Zwischenergebnisse haben nie weniger Dezimal-Stellen als das Endergebnis) in den H-Bestimmungen beseitigt diese Probleme.
H ExprOpts(*ResDecPos)
Birgitta
... und schafft neue, andere.
Kalkulierbares Verhalten erreicht man am einfachsten dadurch, dass man Einzelschritte mit Variablen verwendet, dann kann man klar zum Ausdruck bringen wo man die Rechengenauigkeit braucht.
D*B
Hallo,
die Angabe des Schlüssel-Wortes ExprOpts(*ResDecPos) (Zwischenergebnisse haben nie weniger Dezimal-Stellen als das Endergebnis) in den H-Bestimmungen beseitigt diese Probleme.
H ExprOpts(*ResDecPos)
Birgitta
Oder beim Rechnen mit konstanten die Nachkomma eben mit angibt:
Test = ((49,0 / 7,0) / (12,0 / 6,0))