-
Wenn das Ausgabe-Feld nicht alle Dezimal-Stellen halten kann, wird abgeschritten, so ist nun mal die Aufbereitung.
Es sei denn, Du hättest auf die Anzahl der ausgegebenen Dezimal-Positionen explizit gerundet.
Das hat aber nichts mit SQL zu tun, wie auch die Regeln für die Rechnung mit Integer und Float nichts mit SQL zu tun haben. Das ist nun mal so in "nicht-kaufmännischen" Programmiersprachen und die Datenbank und das SQL dahinter sind fast ausschließlich in C programmiert.
Die RPG und Cobol-Programmierer sind nun mal verwöhnt, weil beides kaufmännische Programmiersprachen sind, bei denen man eine feste Anzahl an Nachkommastellen haben muss und bei denen auch bei der Division von 2 Integer-Werten das Ergebnis Nachkommastellen hat.
I.Ü. haben zumindest die meisten "alten" RPG-Programmierer gelernt, dass man immer zuerst multiplizeren und erst zum Schluss dividieren sollte.
-
Der Vollständigkeit hab ich mir noch die Zeit genommen für den in RPG native:
feld += (feld/100 * mwst);
Resultat: 10.35!
Kein weiterer Kommentar - auch nicht über SQL.
kf
-
Man muss unterscheiden
- Endergebnisse werden immer abgeschnitten, sie müssen ggf. erundet werden Round() / eval(h)
- Zwischenergebnisse werden in SQL und ILERPG leider unterschiedich behandelt.
Im ILERPG-Handbuch gibts eine ausführliche Erklärung, bei SQL finde ich so schnell nichts.
-
 Zitat von Fuerchau
- Zwischenergebnisse werden in SQL und ILERPG leider unterschiedich behandelt.
Im ILERPG-Handbuch gibts eine ausführliche Erklärung, bei SQL finde ich so schnell nichts.
... ich habe keinen Bock, in Handbüchern zu suchen, was ein Programm macht, wenn ich nicht klar sage, was ich haben will. Ich sage stattdessen genau, was ich haben will.
Sprich: geschachtelte Ausdrücke nicht übertreiben und im Zweifel per cast und round festlegen, wie ich das gerechnet haben will.
D*B
-
Leider hilft der Cast auf Zwischenergebnisse auch nicht immer.
Bei einer komplexeren Berechnung bekam ich auch kein erwartetes Ergebnis und ein NULL-Anzeiger brachte eine Warnung -2.
Laut Joblog und einer ESC-Nachricht war ein Zwischenergebnis leider bzgl. der Nachkommastellen nicht mehr darstellbar und die Berechung wurde abgebrochen.
Kein Dec-Cast war dazu in der Lage ein Zwischenergebnis zu bekommen.
Letzte Lösung: Cast auf Double der Einzelwerte und zum Schluss ein
round(dec("komplexer Ausdruck", 18, 9), 2)
Und das Ergebnis war korrekt. Dasselbe in ILERPG funktionierte ohne Probleme.
Similar Threads
-
By dschroeder in forum NEWSboard Programmierung
Antworten: 14
Letzter Beitrag: 05-04-19, 13:16
-
By Stephan70 in forum NEWSboard Programmierung
Antworten: 3
Letzter Beitrag: 21-12-15, 07:12
-
By svit in forum IBM i Hauptforum
Antworten: 14
Letzter Beitrag: 18-06-15, 09:08
-
By a.wojcik in forum NEWSboard Programmierung
Antworten: 24
Letzter Beitrag: 16-01-15, 15:18
-
By Koelch400 in forum IBM i Hauptforum
Antworten: 10
Letzter Beitrag: 12-10-04, 11:48
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