decimal.rexxincl 29.11.2002 16:06:26
/* Decimal: Utility routines for FIXED decimals */
/* (represented as integer) */
Decimal: /* convert decimal value with comma separator */
/* to Fixed decimal integer */
parse arg comma_val,ndig,ndec
comma_val=strip(comma_val)
if pos(',',comma_val)>0 then do /* comma alowed in EDIFACT! */
num_val=changestr(comma_val,',','.') /* replace comma by dot */
numericv=format(num_val,ndig-ndec,ndec) /* and format number */
end
else if pos('.',comma_val)>0 then do /* also dot allowed */
numericv=format(comma_val,ndig-ndec,ndec) /* and format number */
end
else numericv=comma_val'.'copies('0',ndec)
/* now, numericv always exactly has ndec decimals */
numeric0=changestr(numericv,'.','') /* remove dot */
return strip(numeric0) /* with implied decimal point */
/* but NO leading spaces */
EditDecimal:
parse arg numv,ndigs,ndec
numv=right(numv,ndigs,'0') /* add leading zeroes */
idec1=ndigs-ndec+1
nint=ndigs-ndec /* integer digits */
decv=substr(numv,idec1,ndec)
intv=substr(numv,1,nint)
intv=intv+0 /*Ü remove leading zeroes */
editv=right(intv'.'decv,ndigs+1)
return editv
Decimal2:
parse arg numv
return numv/100