PDA

View Full Version : Falsches Ergebnis bei EVAL



Seiten : [1] 2

fpxx
09-11-10, 13:28
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.

Khholm
09-11-10, 14:18
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

fpxx
09-11-10, 14:43
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

Pikachu
09-11-10, 14:49
Probier mal mit EVAL (H R) und gib dem Ergebnis genügend Nachkommastellen.

fpxx
09-11-10, 15:33
Bingo, Ergebnis ist einwandfrei.
Danke

Fuerchau
12-11-10, 11:13
Manchmal genügt es auch, Zahlenkonstanten mit der nötigen Genauigkeit zu definieren:

eval(h) Feld = (FeldA / 1000.00) * (Feld2 / 100.000)

tarkusch
08-10-12, 10:51
Wie setze ich das eigentlich im Free um?


eval(h) Gesamt = (PROZENT / 100) * KOSTEN
9,2 3,1 9,2

Gruß

Tarki

B.Hauser
08-10-12, 12:55
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

Fuerchau
09-10-12, 08:46
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.

tarkusch
09-10-12, 08:59
Danke schön für eure Tips und Hilfen.