[NEWSboard IBMi Forum]

Hybrid View

  1. #1
    Registriert seit
    Jan 2007
    Beiträge
    1.002
    Doch Dietlinde,
    das ist durchaus logisch. Wenn Du ein Feld mit 7.2 definierst, werden halt die übrigen Dezimalstellen abgeschnitten. Siehe Beispiel Andreas, welcher die dritte Stelle erhalten hat. Daher, Dezimal genügend gross oder Division am Schluss.
    kf

  2. #2
    Registriert seit
    Nov 2009
    Beiträge
    222
    Warum ist es logisch, das, wenn ich 2 NK Stellen im ERGEBNIS haben möchte, alle Zwischenergebnisse auch nur 2 NK haben. Darauf habe ich doch keinen Einfluß! das das Endergebnis nicht gerundet sonder abgeschnitten ist, kann ich verstehen. Das die Berechnung sich in Zwischenergebnissen an den dezimalstellen des Ergebnisses orientiert halt ich für einen Fehler
    Es erschließt sich mir nicht.
    Aber ich werde versuchen es mir zu merken.

  3. #3
    Registriert seit
    Aug 2001
    Beiträge
    2.928
    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.
    Birgitta Hauser

    Anwendungsmodernisierung, Beratung, Schulungen, Programmierung im Bereich RPG, SQL und Datenbank
    IBM Champion seit 2020 - 5. Jahr in Folge
    Birgitta Hauser - Modernization - Education - Consulting on IBM i

  4. #4
    Registriert seit
    Jan 2007
    Beiträge
    1.002
    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

  5. #5
    Registriert seit
    Feb 2001
    Beiträge
    20.696
    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.
    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

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

  7. #7
    Registriert seit
    Feb 2001
    Beiträge
    20.696
    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.
    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

Similar Threads

  1. Langsames SQL wegen großer IN() Anweisung
    By dschroeder in forum NEWSboard Programmierung
    Antworten: 14
    Letzter Beitrag: 05-04-19, 13:16
  2. Textfeld mit 1300 Stellen in mehrere Felder a 60 Stellen in RPG oder SQL
    By Stephan70 in forum NEWSboard Programmierung
    Antworten: 3
    Letzter Beitrag: 21-12-15, 07:12
  3. Wandlungsfehler wegen PGMINFO
    By svit in forum IBM i Hauptforum
    Antworten: 14
    Letzter Beitrag: 18-06-15, 09:08
  4. Frage wegen DDS, CONCAT Funktion
    By a.wojcik in forum NEWSboard Programmierung
    Antworten: 24
    Letzter Beitrag: 16-01-15, 15:18
  5. warnschwellwert wegen voller platten erhöhen?
    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
  •