PDA

View Full Version : RPGLE konvertieren Alpha nach Dezimal



Seiten : [1] 2

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

Fuerchau
12-03-09, 16:26
%dec(Alpha:Länge:NK)

z.B. %DEC(FELD:15:2)

Ob Komma oder Punkt entscheidet die H-Bestimmung DECEDIT.

B.Hauser
12-03-09, 20:17
[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....

Fuerchau
13-03-09, 09:02
@Birgitta
Ich habe das aber ausprobiert.
Wenn ich DECEDIT nicht korrekt angebe, gibts beim %DEC einen MCH-Fehler.

B.Hauser
13-03-09, 09:30
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.

BenderD
13-03-09, 09:32
... 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

B.Hauser
13-03-09, 09:35
@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

BenderD
13-03-09, 09:38
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.

BenderD
13-03-09, 09:55
???
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