[NEWSboard IBMi Forum]
Seite 1 von 2 1 2 Letzte

Hybrid View

  1. #1
    Registriert seit
    Jul 2003
    Beiträge
    338

    Thumbs up FREE RPG Extender H für aufrunden

    Wie kann ich aufrunden im FREE RPG.

    Beispiel:
    Ergebnis (h) = Zahl1 * Zahl2


    Die Umwandlungsliste meldet mir: *RNF7030: Der Name H ist nicht definiert.

    Im Internet (RPG-Referenz) konnte ich die Lösung nicht finden.

    mfg. Ludger

  2. #2
    Registriert seit
    Jul 2001
    Beiträge
    16
    versuche es mal mit

    eval(h) Ergebnis = Zahl1 * Zahl2

    mfg Klaus

  3. #3
    Registriert seit
    Aug 2001
    Beiträge
    2.928

    Built-in-Function

    Hallo Ludger,

    normealerweise sind EVAL und CALLP in RPG-Free-Format nicht notwendig.
    Die einzige Ausnahme ist bei Erweiterungen z.B. (H) oder (E).
    Werden Erweiterungen verwendet, darf zwischen dem OpCode und der Erweiterung kein *Blank stehen!
    (Im Gegensatz zur klassischen Schreibweise)

    Wenn Du auf das EVAL verzichten möchtest, musst Du mit Built-In-Funktionen arbeiten.
    z.B. %DecH für Dezimal-Werte, %IntH oder %UnsH für Integer
    Das H steht jeweils für kaufmännisch runden.

    PHP-Code:
     /Free
        Ergebnis 
    = %DecH(Zahl1 Zahl2113);
     /
    End-Free 
    Birgitta
    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
    Jul 2003
    Beiträge
    338
    Hallo Klaus, es hat geklappt, danke..

    Ich war mir 100% sicher, diese Variante schon getestet zu haben, anscheinend wohl doch nicht.

    Ein anderes Problemchen:
    Wie bringe ich in FREE RPG ein Datumsfeld in ein num. Feld mit 6,0 Länge ?

    D Datum S d
    D DatNeu S 6 0

    Datum ist bereits gefüllt (*eur).
    Nun möchte ich den Inhalt von Datum nach DatNeu (dmy) überstellen.

    mfg- Ludger

  5. #5
    Registriert seit
    Jul 2003
    Beiträge
    338
    Hallo Birgitta, danke für den Hinweis.

    Eine Frage zu %decH
    Was bedeuten in dem Beispiel die Angaben :11:3 ?
    Ist das die Länge des Ergebnisfeldes ? Das kann eigentlich nicht sein, da dieses bereits definiert wurde.

    Warum ist in Free Rpg kein CALLP mehr notwendig ?

    mfg. Ludger

  6. #6
    Registriert seit
    Aug 2001
    Beiträge
    2.928

    Datum

    Hallo Ludger,

    1. Umsetzen Datum nach Datum 6,0 im Format DMY:
    PHP-Code:
    D DateEur         S               D   DatFmt(*Eur
    D DateNum         S              6P 0 
     
    /Free                                           
      DateNum 
    = %Int(%Char(DateEur: *DMY0));
     /
    End-Free 
    2. Bei der Built-in-Funktion %DecH können die Länge und die Anzahl der Dezimal-Stellen angegeben werden. (Parameter 2/3)
    Dies ist gerade bei komplexen Rechenoperationen sinnvoll, da intern mit Gleit-Komma gerechnet wird.
    Die Parameter können als Variable verwendet werden.
    Allerdings muss das Format zur Compile-Zeit bekannt sein.
    Am besten hinterlegt man eine Konstante:
    Länge: Const(%Size(RefFeld))
    Anzahl Dezimalstellen: Const(%DecPos(RefFeld)

    3. Warum wird CallP im Free-Format nicht mehr benötigt?
    Die Frage müsste anders lauten: Warum wurde CallP in der klassischen Schreibweise benötigt?
    Aus dem gleichen Grund warum EVAL erfunden wurde:
    Damit das Feld OPCODE gefüllt werden kann.
    Durch die eindeutige Schreibweise kann der Compiler erkennen, dass es sich um einen Programm/Prozedur-Aufruf handelt.

    Birgitta
    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

  7. #7
    Registriert seit
    Jul 2003
    Beiträge
    338

    Wink

    Hallo Birgitta,

    noch mal eine Frage zum alten Thema:

    Definiert die Angabe der Dezimalstellen beim %decH die Größe des internen Rechenfeldes ?

    Zitat Zitat von B.Hauser
    Bei der Built-in-Funktion %DecH können die Länge und die Anzahl der Dezimal-Stellen angegeben werden. (Parameter 2/3)
    Dies ist gerade bei komplexen Rechenoperationen sinnvoll,
    da intern mit Gleit-Komma gerechnet wird.
    Die Parameter können als Variable verwendet werden.
    Allerdings muss das Format zur Compile-Zeit bekannt sein.
    Am besten hinterlegt man eine Konstante:
    Länge: Const(%Size(RefFeld))
    Anzahl Dezimalstellen: Const(%DecPos(RefFeld)

    Birgitta

    mfg. Ludger

  8. #8
    Registriert seit
    Feb 2001
    Beiträge
    20.695
    Nur die Größe des Endergebnisses. Intern wird mit Fließkomma gerechnet.
    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

  9. #9
    Registriert seit
    Jul 2003
    Beiträge
    338
    Zitat Zitat von Fuerchau
    Nur die Größe des Endergebnisses. Intern wird mit Fließkomma gerechnet.
    Dann verstehe ich nicht, warum Dezimalstellen im %decH angegeben werde müssen, da diese doch bereits durch die Angabe des Ergebnisfeldes definiert sind.

    ??

    mfg. Ludger

  10. #10
    Registriert seit
    Aug 2001
    Beiträge
    2.928
    Zitat Zitat von loeweadolf
    Dann verstehe ich nicht, warum Dezimalstellen im %decH angegeben werde müssen, da diese doch bereits durch die Angabe des Ergebnisfeldes definiert sind.

    ??

    mfg. Ludger
    Du kannst aber auch Built-in-Funktionen dazu benutzen, um innerhalb einer Formel zu runden.
    Oder aber Dein Standard-Feld ist zwar 15,5 aber es sollen nur 2 Nachkommastellen ausgewiesen werden.

    Birgitta
    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

  11. #11
    Registriert seit
    Jul 2003
    Beiträge
    338
    Zitat Zitat von B.Hauser
    Du kannst aber auch Built-in-Funktionen dazu benutzen, um innerhalb einer Formel zu runden.
    Oder aber Dein Standard-Feld ist zwar 15,5 aber es sollen nur 2 Nachkommastellen ausgewiesen werden.

    Birgitta
    Aha,

    ist denn immer gewährleistet, dass bei der interne Rechnung
    die internen Rechenfelder eine ausreichende Größe haben ?

    mfg. Ludger

  12. #12
    Registriert seit
    Aug 2001
    Beiträge
    2.928
    Zitat Zitat von loeweadolf
    Aha,

    ist denn immer gewährleistet, dass bei der interne Rechnung
    die internen Rechenfelder eine ausreichende Größe haben ?

    mfg. Ludger
    Reicht Dir der Bereich zwischen ca. 2,2 *10 hoch -308 bis 1,8 *10 hoch +308?

    Ungenauigkeiten kann es allerdings geben, wenn mit mehr als 16 Nachkommastellen gerechnet werden muss.

    Birgitta
    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

Similar Threads

  1. Datum-Konvertierung free rpg
    By loeweadolf in forum NEWSboard Programmierung
    Antworten: 6
    Letzter Beitrag: 14-03-08, 06:21
  2. Frei Porn Site!
    By Fucasdreh in forum NEWSboard Server Job
    Antworten: 0
    Letzter Beitrag: 10-01-07, 13:12
  3. Mehrere Bezugszahlen auf *off in Free RPG
    By mgraskamp in forum NEWSboard Programmierung
    Antworten: 13
    Letzter Beitrag: 16-02-06, 16:01
  4. FREE RPG .. TESTN
    By loeweadolf in forum NEWSboard Programmierung
    Antworten: 7
    Letzter Beitrag: 25-01-05, 07:43
  5. Free Rpg Zeitdauer errechnen
    By loeweadolf in forum NEWSboard Programmierung
    Antworten: 3
    Letzter Beitrag: 12-07-04, 09:27

Berechtigungen

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