-
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
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