[NEWSboard IBMi Forum]
Seite 1 von 2 1 2 Letzte
  1. #1
    Registriert seit
    Sep 2004
    Beiträge
    327

    VRUNDEN() in RPG

    Hallo,
    hat jemand sich schon mal an der Excel VRUNDEN Funktion im RPG versucht oder gibt es da eine fertige Funktion, glaube aber nicht.
    VRUNDEN:
    Hier kann man nämlich auf das Vielfache eines angegebenen Wertes runden. Dabei wird sowohl auf- als auch abgerundet. Es wird immer in die Richtung gerundet, in der das Vielfache näher an meiner Zahl liegt.
    Beispiel
    VRUNDEN(7,4;5) = 5
    VRUNDEN(7,5;5) = 10

    Danke schon mal.
    Gruß Klaus

  2. #2
    Registriert seit
    Feb 2001
    Beiträge
    20.236
    Das ist doch ein alter Hut:

    eval faktor = %int(Wert:Rundung);
    if %rem(Wert:Rundung) > *zero;
    faktor += 1;
    endif;
    eval neuerwert = faktor * Rundung;

    Dies ist grundsätzlich Aufrundung.
    Möchte man negative Werte abrunden, ist der faktor mit -1 zu vermindern.

    Das klappt mit allen Werten, die nicht 0 sind;-).
    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
    Sep 2004
    Beiträge
    327
    dein Beispiel rundet aber immer auf, VRUNDEN rundet auch ab. Siehe mein Beispiel und %REM geht nur mit Ganzzahlen. Oder sehe ich etwas falsch?

  4. #4
    Registriert seit
    Feb 2001
    Beiträge
    20.236
    Ja stimmt, mann kann dan halt
    select;
    when faktor * rundung = wert;
    neuerwert = wert;
    when wert > *zero;
    neuerWert = (faktor + 1) * rundung;
    other;
    neuerwert = (faktor - 1) * rundung;
    endsl:
    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

  5. #5
    Registriert seit
    Sep 2004
    Beiträge
    327
    irgendwie stehe ich auf dem Schlauch.
    Faktor wird in der Schleife hochgezählt und startet mit 1, richtig?
    Rundung wäre 5 in meinem Beispiel und Wert müsste dann 7,4 sein, richtig?
    wenn ja, dann kann die Abfrage when wert > 0 nicht passen.
    Lass mal, ich schaue mir das anders an, hatte auch die Hoffnung, dass es da etwas fertiges gibt.

  6. #6
    Registriert seit
    Feb 2001
    Beiträge
    20.236
    Noch mal komplett:

    eval faktor = %int(Wert:Rundung);

    select;
    when faktor * rundung = wert;
    neuerwert = wert;
    when wert > *zero;
    neuerWert = (faktor + 1) * rundung;
    other;
    neuerwert = (faktor - 1) * rundung;
    endsl;

    7,5 / 5 = 1
    when 1 * 5 = 7,5 => 7,5
    when 7,5 > 0 => (1+1) * 5 = 10
    other => (1-1) * 5 = 0

    -7,5 / 5 = -1
    when -1 * 5 = -7,5 => -7,5
    when -7,5 > 0 => (-1+1) * 5 = 0
    other => (-1-1) * 5 = -10

    Das ganze dann in eine schöne Funktion "VRunden" gepackt.
    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

  7. #7
    Registriert seit
    Sep 2004
    Beiträge
    327
    sorry das kann nicht richtig sein.
    Bei einem Wert von 7,5 und einer Rundung muss 10 als Ergebnis kommen. Bei einem Wert von z.B.: bei 7,49 muss 5 kommen, weil 7,49 näher an 5 ist als an 10.
    Ich mache es jetzt anders:
    Wert = 7,5
    Rundung = 5
    Do x

    if (x * 5) > 7,49
    if %abs((x*5)-7,49) < %abs(((x-1)*5)-7,49)
    eval Ergebnis = (x-1)*5
    else
    eval Ergebnis = x*5
    EndIf
    EndIf
    x =+
    Enddo

    Bei einem minus Input Value muss es umgekehrt geprüft werden.
    Ich packe das mal in eine Funktion.

  8. #8
    Registriert seit
    Aug 2001
    Beiträge
    2.873
    Einfach: Dividieren, Runden und danach multiplizieren

    Ich hab's jetzt hier nur mit SQL ... aber in RPG sollte es genauso funktionieren:

    Code:
    Values(Round(7,4 / 5,0 , 0) * 5);
    Values(Round(7,5 / 5,0 , 0) * 5);
    Values(Round(7,6 / 5,0 , 0) * 5);
    Liefert: 5, 10, 10
    Birgitta Hauser

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

  9. #9
    Registriert seit
    Sep 2004
    Beiträge
    327
    Oh mein Gott, wie einfach. Super, vielen Dank.

  10. #10
    Registriert seit
    Feb 2001
    Beiträge
    20.236
    Dann gehts auch mit RPG:

    %dech(7,4 / 5,0 : 11 : 0) * 5,0
    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

  11. #11
    Registriert seit
    Jan 2007
    Beiträge
    905
    Ich fass es nicht. Dieser Meccano ist doch seit S/34 Zeiten bekannt. Klar, wir müssen hier natürlich auch mit 5er Rundungen leben. Mit ensprechendem Multiplikator und Divisor funktioniert das in allen Schattierungen bis man lustig ist. Mal schauen ob das die KI auch weiss.
    kf

  12. #12
    Registriert seit
    Feb 2001
    Beiträge
    20.236
    Meine 1. Lösung war mal gedacht zum generellen Aufrunden.
    Z.B. bei Preiskalulationen auf die nächste schöne Zahl hochrunden, z.B. auf 0,25 oder 2,50 oder bei großen Werten auch gerne af 250 oder 500.
    Dabei sollte eben nicht gerundet werden, wenn das Ergebnis bereits passte.
    Negative Werte wurden auch aufgerundet, also von -1,20 auf -1,00, um z.B. bei Rechnungen einen höheren Wert als bei Gutschriften zu haben. Das Wertrisiko liegt da beim Kunden.

    Interessant ist, dass man für alles und jedes nun SQL nehmen soll;-).
    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. Antworten: 1
    Letzter Beitrag: 09-07-10, 12:18
  2. Von RPG auf ILE-RPG oder ILE-RPG überarbeiten !
    By W.Steiner in forum Archiv NEWSblibs
    Antworten: 1
    Letzter Beitrag: 13-11-02, 10:15
  3. Von RPG auf ILE-RPG
    By Kilianski in forum NEWSboard Server Software
    Antworten: 0
    Letzter Beitrag: 17-07-02, 16:35
  4. Zu verkaufen: RPG/400, RPG/ILE und ADTS/400 !!!
    By Ron in forum NEWSboard Server & Hardware Markt
    Antworten: 0
    Letzter Beitrag: 15-04-02, 14:24
  5. Frage zu RPG: Aufruf RPG-Programm mit Parametern
    By hs in forum IBM i Hauptforum
    Antworten: 14
    Letzter Beitrag: 09-10-01, 12:06

Tags for this Thread

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • You may not post attachments
  • You may not edit your posts
  •