View Full Version : RPGLE konvertieren Alpha nach Dezimal
weidenhammer
12-03-09, 15:46
Hallo Allerseits,
ich glaube, ich stehe gerade auf dem Schlauch..... Bitte um Hilfe!!!
Ich habe ein Feld, definiert als 10A.
Der Inhalt ist z.b. ' 4951,00'
Dann habe ich ein Feld, definiert als 15P 2
und möchte, dass im Feld 2 dann der numerische Wert 4951,00 drinsteht.
Ich krieg es gerade nicht hin.....
Kann mir jemand helfen?
Vielen Dank schonmal.....
MfG
Alexander May
%dec(Alpha:Länge:NK)
z.B. %DEC(FELD:15:2)
Ob Komma oder Punkt entscheidet die H-Bestimmung DECEDIT.
[QUOTE=Fuerchau;61695Ob Komma oder Punkt entscheidet die H-Bestimmung DECEDIT.[/QUOTE]
Ob Komma oder Punkt ist völlig egal. (Der String darf nur keine zusätzlichen Tausender-Punkte oder Kommata enthalten).
Unabhängig von der Einstellung in den H-Bestimmungen kann beides konvertiert werden.
Birgitta
weidenhammer
12-03-09, 21:13
Hallo Ihr beiden,
Danke für die Beiträge, hab es hinbekommen.
Manchmal steht man echt auf der Leitung oder der Tag is einfach zu lang.
Schönen Abend noch....
@Birgitta
Ich habe das aber ausprobiert.
Wenn ich DECEDIT nicht korrekt angebe, gibts beim %DEC einen MCH-Fehler.
Also beim mir läuft das folgende Programm ohne Probleme und soweit ich mich erinnern kann hat %DEC auch immer korrekt funktioniert.
H DEBUG DECEDIT('0,') DATEDIT(*DMY.) DATFMT(*ISO)
************************************************** ***************
D Alpha S 15A
D Numer S 11P 2
D Index S 3U 0
D PGMSDS SDS
D SDSMsgTxt 91 120
************************************************** ***************
/Free
For Index = 1 to 7;
Select;
When Index = 1;
Alpha = '11111';
When Index = 2;
Alpha = '22222,22';
When Index = 3;
Alpha = '3333.333';
When Index = 4;
Alpha = ' 4 4 4, 44';
When Index = 5;
Alpha = ' 55 5.5 5';
When Index = 6;
Alpha = '-66 6.66';
When Index = 7;
Alpha = '77777, 77-';
EndSl;
Monitor;
Numer = %Dec(Alpha: 11: 2);
Dsply ('Numer: ' + %Char(Numer));
On-Error;
Dsply (%Trim(Alpha) + SDSMsgTxt);
EndMon;
EndFor;
*InLR = *On;
/End-Free
MCH-Fehler bedeuten, dass eigentlich ein Parameter/Wert fehlt und nicht, dass ein falscher Wert eingegeben wurde.
... dann kann das zaubern, oder rät und macht dann bei %dec(100.000) mal hundert und mal hunderttausend draus und hat damit immerhin eine Trefferquote von 50%, was für RPG garnicht mal so schlecht ist.
D*B
Unabhängig von der Einstellung in den H-Bestimmungen kann beides konvertiert werden.
Birgitta
@Dieter
wie zuvor bereits erwähnt, Tausender Punkte werden ignoriert, d.h. er rät nicht, sondern 100.000 wird nach den Regeln in 100 konvertiert!!!
Birgitta
heißt jetzt ohne Probleme, dass 1 und 2 funzt und der Rest auf den Hammer läuft, sprich durch den error Block des monitor läuft?
Alles andere verursacht ja im Zweifel Probleme!!!
D*B
Also beim mir läuft das folgende Programm ohne Probleme und soweit ich mich erinnern kann hat %DEC auch immer korrekt funktioniert.
H DEBUG DECEDIT('0,') DATEDIT(*DMY.) DATFMT(*ISO)
************************************************** ***************
D Alpha S 15A
D Numer S 11P 2
D Index S 3U 0
D PGMSDS SDS
D SDSMsgTxt 91 120
************************************************** ***************
/Free
For Index = 1 to 7;
Select;
When Index = 1;
Alpha = '11111';
When Index = 2;
Alpha = '22222,22';
When Index = 3;
Alpha = '3333.333';
When Index = 4;
Alpha = ' 4 4 4, 44';
When Index = 5;
Alpha = ' 55 5.5 5';
When Index = 6;
Alpha = '-66 6.66';
When Index = 7;
Alpha = '77777, 77-';
EndSl;
Monitor;
Numer = %Dec(Alpha: 11: 2);
Dsply ('Numer: ' + %Char(Numer));
On-Error;
Dsply (%Trim(Alpha) + SDSMsgTxt);
EndMon;
EndFor;
*InLR = *On;
/End-Free
MCH-Fehler bedeuten, dass eigentlich ein Parameter/Wert fehlt und nicht, dass ein falscher Wert eingegeben wurde.
???
solll das jetzt heißen, das sowohl Punkt als auch Komma immer Dezimalzeichen sind
???
das wäre ja noch schlimmer als raten
@Dieter
wie zuvor bereits erwähnt, Tausender Punkte werden ignoriert, d.h. er rät nicht, sondern 100.000 wird nach den Regeln in 100 konvertiert!!!
Birgitta