[NEWSboard IBMi Forum]

Thema: Runden

  1. #1
    Registriert seit
    Mar 2010
    Beiträge
    54

    Smile 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

  2. #2
    Registriert seit
    Feb 2001
    Beiträge
    20.245
    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
    Dienstleistungen? Die gibt es hier: http://www.fuerchau.de
    Das Excel-AddIn: https://www.ftsolutions.de/index.php/downloads
    BI? Da war doch noch was: http://www.ftsolutions.de

  3. #3
    Registriert seit
    Mar 2010
    Beiträge
    54

    Smile Runden

    Vielen Dank für die Hilfe !

  4. #4
    Registriert seit
    Mar 2002
    Beiträge
    5.287
    ... 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 Zitat von Fuerchau Beitrag anzeigen
    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
    AS400 Freeware
    http://www.bender-dv.de
    Mit embedded SQL in RPG auf Datenbanken von ADABAS bis XBASE zugreifen
    http://sourceforge.net/projects/appserver4rpg/

Similar Threads

  1. Kaufmänisch Runden
    By steven_r in forum NEWSboard Programmierung
    Antworten: 2
    Letzter Beitrag: 28-09-06, 07:53
  2. kaufmänisches Runden im free-format
    By zannaleer in forum NEWSboard Programmierung
    Antworten: 7
    Letzter Beitrag: 24-12-04, 12:53
  3. Runden im SQL
    By skipper_k in forum IBM i Hauptforum
    Antworten: 3
    Letzter Beitrag: 19-06-02, 15:53
  4. Runden im Query
    By Christof in forum IBM i Hauptforum
    Antworten: 2
    Letzter Beitrag: 11-01-02, 12:34
  5. Runden über SQL Hiiiiilfe!!!!
    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
  •