View Full Version : Falsches Ergebnis bei EVAL
Hallo @ all,
in einem RPGLE-Programm kommt folgendes Statement vor
EVAL(H) Ergebnis = ((VariableA/1000) / (VariableB/100)) * VariableC
FeldDef:
Ergebnis 7.2
VariableA 4.0
Variablel 3.0
VariableC 4.3
Bei den Inhalten
VariableA = 3900
VariableB = 57
VariableC = 8,500
erhalte ich ein Ergebnis von 51,00.
Was mache ich da falsch?
Danke im Voraus.
der RGP rundet selber schon intern (z.B. sind ja Variablea und b ohne Nachkomme definiert), das führt manchmal zu überraschenden Ergebnissen.
Abhifel:
selber Zwischenfelder mit entsrpechender Genauigkeit definieren und mit diesen rechnen.
also etwa
zw1 8,3
zw1 = variablea/1000
usw
gr
Karl-Heinz
Hallo Karl-Heinz,
ich hatte schon so was vermutet und auch mit Hilfs-Variablen gelöst.
Aber damit bin ich wieder auf der Ebene des alten RPG, wo ich Hilfsfelder definieren muss und eher unübersichtliche Strukturen schaffen muss.
Ich dachte, mit EVAL könnte ich das vermeiden, weil dieser Befehl so "schlau" sein sollte, intern möglichst genau zu rechnen.
Danke für die Antwort
Franz
Probier mal mit EVAL (H R) und gib dem Ergebnis genügend Nachkommastellen.
Bingo, Ergebnis ist einwandfrei.
Danke
Manchmal genügt es auch, Zahlenkonstanten mit der nötigen Genauigkeit zu definieren:
eval(h) Feld = (FeldA / 1000.00) * (Feld2 / 100.000)
Wie setze ich das eigentlich im Free um?
eval(h) Gesamt = (PROZENT / 100) * KOSTEN
9,2 3,1 9,2
Gruß
Tarki
Das ist Free-Format (du musst lediglich ein Semi Colon am Ende hinzufügen)!
Eval(H) Gesamt = (Prozent/100) * Kosten;
Ansonsten kannst Du mit Hilfe der Built-In-Function %DECH kaufmännisch auf die gewünschte Anzahl Nachkommastellen runden.
Gesamt = %DecH(%DecH(Prozent/100: 5: 3) * Kosten: 9: 2);
Birgitta
Manchmal ist auch "eval(r) ..." ganz hilfreich um bei Zwischenergebnissen auf mehr Nachkomma zu kommen.
Das gibts auch als Compiler-Option bzw. H-Bestimmung.
Bei Dezimalkonstanten sollte man nach Möglichkeit die Mindestanzahl an Nachkomma mit angeben um obige Probleme (Ganzzahlenarithmetik) zu vermeiden.
Also eher
eval(h) Gesamt = (PROZENT / 100.00) * KOSTEN
Das gilt i.Ü. auch für SQL.
Danke schön für eure Tips und Hilfen.