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