
Zitat von
BenderD
... versteh ich das irgendwie falsch? Das ist doch elementar, das Einzige, was nicht ganz glatt ist: weder der Alfawert noch eine zoned Variable weiß wieviel Nachkommastellen er/sie hat.
Das ist doch simpel eine Procedure huddel2pack(huddel : scale), die eine packed(30:10) zurückgibt (huddel ist alfa, scale ist int).
Drin eine DS mit Alfa und zoned Feld überlagert. Parameter in alfa rein, durch scale dividieren und an den Returnwert zuweisen.
D*B
Ja, du hast recht. Genauso habe ich es jetzt auch gelöst. Habe gestern wohl etwas auf dem Schlauch gestanden. Bin gerade erst damit fertig geworden, sonst hätte ich mich schon eher gemeldet. Also vielen Dank.
Hier die Lösung:
Code:
dcl-proc um_cvtZonedStrToPacked export;
dcl-pi *n packed(30:10);
i#zoned varchar(30) const;
i#dezimalOpt packed(2) const options(*nopass);
end-pi;
dcl-s dezimal packed(2);
dcl-s divisor packed(30);
dcl-s result packed(30:10);
dcl-ds convert;
charFeld char(30);
zonedFeld zoned(30) overlay(charFeld);
end-ds;
if %parms >= %parmnum(i#dezimalOpt);
dezimal = i#dezimalOpt;
endif;
monitor;
charFeld = *zero;
//Den zoned String rechtsbündig unter Beibehaltung der Vornullen
//in das charFeld einfügen:
charFeld = um_insertRight(charFeld:%trim(i#zoned));
on-error;
zonedFeld = 0;
endmon;
divisor = 10**dezimal;
result = zonedFeld / divisor;
return result;
end-proc;
Bookmarks