-
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?
Code:
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)!
Code:
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.
Code:
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.
-
Um es mit dem allseits bekannten Baumarktleiter aus dem westlichen Ostwestfalen, also östlichem Ruhrgebiet, also eigentlich Dortmund, zu sagen:
"Immer füe Sie da!" 
(Fritz Ekenga, falls er unbekannt sein sollte.)
Similar Threads
-
By Jenne in forum IBM i Hauptforum
Antworten: 10
Letzter Beitrag: 24-11-09, 13:58
-
By lyrics in forum IBM i Hauptforum
Antworten: 2
Letzter Beitrag: 24-08-06, 12:10
-
By SUBUIS in forum IBM i Hauptforum
Antworten: 4
Letzter Beitrag: 09-05-06, 09:36
-
By Spoldo in forum NEWSboard Programmierung
Antworten: 5
Letzter Beitrag: 19-04-05, 15:32
-
By Rincewind in forum NEWSboard Programmierung
Antworten: 14
Letzter Beitrag: 10-03-05, 11:15
Berechtigungen
- Neue Themen erstellen: Nein
- Themen beantworten: Nein
- You may not post attachments
- You may not edit your posts
-
Foren-Regeln
|
Erweiterte Foren Suche
Google Foren Suche
Forum & Artikel Update eMail
AS/400 / IBM i
Server Expert Gruppen
Unternehmens IT
|
Kategorien online Artikel
- Big Data, Analytics, BI, MIS
- Cloud, Social Media, Devices
- DMS, Archivierung, Druck
- ERP + Add-ons, Business Software
- Hochverfügbarkeit
- Human Resources, Personal
- IBM Announcements
- IT-Karikaturen
- Leitartikel
- Load`n`go
- Messen, Veranstaltungen
- NEWSolutions Dossiers
- Programmierung
- Security
- Software Development + Change Mgmt.
- Solutions & Provider
- Speicher – Storage
- Strategische Berichte
- Systemmanagement
- Tools, Hot-Tips
Auf dem Laufenden bleiben
|
Bookmarks