-
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
-
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;-).
-
dein Beispiel rundet aber immer auf, VRUNDEN rundet auch ab. Siehe mein Beispiel und %REM geht nur mit Ganzzahlen. Oder sehe ich etwas falsch?
-
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:
-
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.
-
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.
-
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.
-
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
-
Oh mein Gott, wie einfach. Super, vielen Dank.
-
Dann gehts auch mit RPG:
%dech(7,4 / 5,0 : 11 : 0) * 5,0
-
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
-
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;-).
Similar Threads
-
By Monta in forum NEWSboard Server Job
Antworten: 1
Letzter Beitrag: 09-07-10, 12:18
-
By W.Steiner in forum Archiv NEWSblibs
Antworten: 1
Letzter Beitrag: 13-11-02, 10:15
-
By Kilianski in forum NEWSboard Server Software
Antworten: 0
Letzter Beitrag: 17-07-02, 16:35
-
By Ron in forum NEWSboard Server & Hardware Markt
Antworten: 0
Letzter Beitrag: 15-04-02, 14:24
-
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
-
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