-
"13.456,78" in Zahl 12345678 umwandeln
Hi Forum, bevor ich jetzt das rad neu erfinde, hat vielleicht jemand einen Codeschnipsel, um aus einem Alpaafeld die nummerischen Werte ohne dezimalpunkt und Komma rechtsbündig zurückzugeben?
Wäre schick.
Danke
Andreas
Andreas
***Wer einen Schreibfehler findet darf ihn behalten***
-
Wie wäre es mit:
evalr Zielfeld = %char(%dec(%dec(Quellfeld:10:2) * 100:12:0))
-
Zitat von Fuerchau
Wie wäre es mit:
evalr Zielfeld = %char(%dec(%dec(Quellfeld:10:2) * 100:12:0))
Hallo Fuerchau,
danke für die prompte Antwort.
Leider mag der compiler (V5R1) den code so nicht.
Code:
D Alpha S 9A inz('13.456,78')
D Num S 10S 2 inz(0)
C evalr num = %char(%dec(%dec(Alpha:09:2)*100:12:0))
C eval *inlr = *on
*RNF0327 30 5 000300 Der erste Parameter für %DEC oder %DECH ist ungültig.
wo könnte mein Fehler liegen?
%dec als numerischen Ausdruck %dec mitzugeben habe ich ehrlich gesagt auch noch nie probiert.
%char bräuchte ich in diesem Feld nicht unbedingt, da ich ja mit dem Ergebnis rechnen möchte (daher numerische Werte rauspicken)
Gruß
Andreas
***Wer einen Schreibfehler findet darf ihn behalten***
-
Zitat von AndreasH
C evalr num = %char(%dec(%dec(Alpha:09:2)*100:12:0))
Hallo Andreas,
Erst ab Release V5R2M0 ist es möglich über Built-in-Funktionen alphanumerische Werte in numerische Werte zu konvertieren.
Allerdings dürfte der Code auch unter Release V5R2M0 nicht funktionnieren, da die Built-in-Funktionen %Dec, %DecH, %Int, %IntH, %Uns und %UnsH keine Tausender-Trennzeichen konvertieren können. Die Tausender-Trennzeichen müssten zunächst über %XLate in *Blanks konvertiert werden. Dezimal-Trennzeichen sind kein Problem. Dabei kann Punkt und Komma alternativ verwendet werden.
Unter V5R1M0 hast Du nur die Möglichkeit das Ganze zu Fuss zu programmieren, d.h. die Tausender-Zeichen und das Dezimal-Trennzeichen zu entfernen, den Feld-Inhalt rechtsbündig ausrichten und dann mit dem guten alten MOVE in ein numerisches Feld zu schieben.
Birgitta
-
Das Problem der %dec-Funktion liegt wohl darin, das als 1. Argument kein Return-Wert einer anderen Funktion akzeptiert wird.
Also ggf. schrittweise vorgehen:
eval alpha = %xlate(alpha:'.,':' ')
Da du ja den Ganzzahlwert brauchst, kannst du Komma und Punkt ersetzen (vorausgesetzt, die Anzahl Nachomma sind immer gleich).
eval numfeld = %dec(alpha:9:0)
Dies müsste auch unter V5R1 klappen.
@Birgitta
Das mit dem move geht insoweit in die Hose, als dass Leerzeichen zwischen den Ziffern als '0' angenommen werden.
-
Hallo zusammen,
leider gehts scheinbar tatsächlich nur zu Fuß.
Code:
D Alpha S 9A inz('13.456,78')
D Num S 10S 2 inz(0)
C eval Alpha = %xlate(Alpha:'.;':' ')
C evalr num = %dec(Alpha:09:00)
C eval *inlr = *on
Code:
*RNF0327 30 6 000400 Der erste Parameter für %DEC oder %DECH ist ungültig.
*RNF7565 30 6 000400 Das Ergebnis einer Operation EVALR ist kein Zeichen- oder
Grafikfeld fester Länge.
Gruß und schönes Wochenende
Andreas
***Wer einen Schreibfehler findet darf ihn behalten***
-
"evalr" geht natürlich nur für Zeichenfelder. Bei numerischen gilt nur "eval".
Bei der Definition von "Alpha" lass das "A" für den Typ weg !
Damit bestimmst du ein reines ALpha-Feld und kein CHARACTER-Feld. Daher der 1. Fehlerhinweis.
D Alpha S 9 inz('13.456,78')
-
Hallo Leute,
warum glaubt Ihr mir eigentlich nicht, dass die Built-in-Funktionen %Dec usw. erst ab V5R2M0 in der Lage sind alphanumerische Werte in numerische Werte zu konvertieren.
@Fuerchau
Ich hatte mich wohl etwas unklar ausgedrückt, mit Tausender- und Dezimal-Trennzeichen entfernen, habe ich natürlich nicht gemeint sie einfach durch *Blanks zu ersetzten, sondern den String zusammen zu schieben.
Character und Alpha-Felder sind das Gleiche! Zumindest gibt es nirgends in der Dokumentation einen Hinweis, dass es Unterschiede geben könnte.
Birgitta
-
@Birgitta
Ich habe immer in das Handbuch "ILE-RPG Reference c0925084.pdf" von August 2002 geschaut, und siehe, das ist ja doch schon V5R2 (schon so lange her, tztz).
Also bitte vielmals um Vergebung !
-
Andreas
***Wer einen Schreibfehler findet darf ihn behalten***
-
geht auch mit SQL
Der Beitrag ist zwar schon lange erledigt, aber ich gebe trotzdem noch meinen Senf dazu.
mychar hat den Wert '123.456,78'.
Mit SQL bzw. embedded SQL würde es so aussehen:
select
cast(
replace(mychar, '.', '')
as decimal(9, 2))
from mytable
Uwe
-
Seit wann gibts "replace" ?
V5R2 ?
V5R3 ?
Similar Threads
-
By helion60 in forum IBM i Hauptforum
Antworten: 3
Letzter Beitrag: 08-11-06, 15:48
-
By Murat in forum NEWSboard Drucker
Antworten: 2
Letzter Beitrag: 22-10-06, 12:28
-
By muadeep in forum IBM i Hauptforum
Antworten: 1
Letzter Beitrag: 03-07-06, 09:50
-
By ludwigD in forum IBM i Hauptforum
Antworten: 7
Letzter Beitrag: 15-05-05, 15:05
-
By Kilianski in forum NEWSboard Server Software
Antworten: 0
Letzter Beitrag: 13-01-05, 13:55
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