-
Runden
Hallo zusammen,
sicher ein kleines Problem für die Fachleute hier.
Weshalb bekomme ich so kein gerundetes Ergebnis ?
round(SUM(EKWERT01)/ SUM(LBMENG01) , 2)
EKWERT01: 31.246.38 Numeric 25, 4
LBMENG01: 11.010.00 Numeric 14, 2
also sollte doch 2.84 rauskommen ??
Danke für die Hilfe
-
Das Problem bei SQL ist das Zwischenergebnis der Division.
Unter V5R4 sind die Anzahl Nachkommastellen = NK1 - NK2 (warum auch immer).
Teilst du also ein 25,4 durch 14,2 ist das Ergebnis 25,2 da bleibt kein Platz zum Runden.
Die Rundung kürzt nicht das Ergebnisfeld sonder rechnet nur.
Um also genügend NK's zu erhalten muss du den Dividenden auf mehr NK's casten:
round(SUM(dec(EKWERT01, 27, 6))/ SUM(LBMENG01) , 2)
Je mehr NK's im Zwischenergebnis (da dies abgeschnitten wird) desto genauer die Rundung:
round(0,4945, 2) => 0,5000
round(0,494, 2) = 0,490
-
Runden
Vielen Dank für die Hilfe !
-
... da werden keine Nachkommastellen durch Subtraktion ermittelt, das Problem liegt darin, dass die Query Engine nicht weiß wo sie die Genauigkeit braucht!
Für die Summierung geht die Query Engine auf die maximale Länge und bei der Division geht ihr dann die Luft aus und aus lauter Angst vor Overflow spart sie hinten Nachkommastellen.
Das kann man mit einem kurzen Testquery ohne Summe prüfen select ekwert/lbmeng from ...
Abstellen kann man das mit einem entsprechenden cast um die Summierungen.
@Baldur:... im übrigen würde ich mal den PTF Stand überprüfen:
round(0,4945, 2) => 0,5000 ist schnöderweise falsch und gibt bei mir richtigerweise 0,4900
D*B
Zitat von Fuerchau
Das Problem bei SQL ist das Zwischenergebnis der Division.
Unter V5R4 sind die Anzahl Nachkommastellen = NK1 - NK2 (warum auch immer).
Teilst du also ein 25,4 durch 14,2 ist das Ergebnis 25,2 da bleibt kein Platz zum Runden.
Die Rundung kürzt nicht das Ergebnisfeld sonder rechnet nur.
Um also genügend NK's zu erhalten muss du den Dividenden auf mehr NK's casten:
round(SUM(dec(EKWERT01, 27, 6))/ SUM(LBMENG01) , 2)
Je mehr NK's im Zwischenergebnis (da dies abgeschnitten wird) desto genauer die Rundung:
round(0,4945, 2) => 0,5000
round(0,494, 2) = 0,490
Similar Threads
-
By steven_r in forum NEWSboard Programmierung
Antworten: 2
Letzter Beitrag: 28-09-06, 07:53
-
By zannaleer in forum NEWSboard Programmierung
Antworten: 7
Letzter Beitrag: 24-12-04, 12:53
-
By skipper_k in forum IBM i Hauptforum
Antworten: 3
Letzter Beitrag: 19-06-02, 15:53
-
By Christof in forum IBM i Hauptforum
Antworten: 2
Letzter Beitrag: 11-01-02, 12:34
-
By infomio in forum IBM i Hauptforum
Antworten: 7
Letzter Beitrag: 27-11-01, 19:31
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