FUNCTION STRLALIGN,x,w

IF N_ELEMENTS(w) EQ 0 THEN w=0

s=STRTRIM(STRING(x),2)
i=STRPOS(s,'.')
i=i[N_ELEMENTS(i)-1]

i0=STRLEN(s)
i1=STRPOS(STRUPCASE(s),'E')
i2=STRPOS(STRUPCASE(s),'D')
exp=0
i1=i1[N_ELEMENTS(i)-1]
i2=i2[N_ELEMENTS(i)-1]
IF i1 NE -1 THEN exp=MAX([exp,i0-i1+1])
IF i2 NE -1 THEN exp=MAX([exp,i0-i2+1])

IF i EQ -1 THEN i=STRLEN(s)+1
WHILE (STRMID(s,STRLEN(s)-exp-1,1) EQ '0')  $
  AND (STRLEN(s) GE i) DO BEGIN 
    s=STRMID(s,0,STRLEN(s)-exp-1)+STRMID(s,STRLEN(s)-exp+1,exp)
ENDWHILE
IF (STRMID(s,STRLEN(s)-1,1) EQ '.') THEN $
  s=STRMID(s,0,STRLEN(s)-1)

REPEAT BEGIN
    i=STRPOS(s,'e-0') 
    i=i[N_ELEMENTS(i)-1]
    IF i NE -1 THEN s=STRMID(s,0,i+2)+STRMID(s,i+3,STRLEN(s)-(i+3))
ENDREP UNTIL i EQ -1

REPEAT BEGIN
    i=STRPOS(s,'d-0') 
    i=i[N_ELEMENTS(i)-1]
    IF i NE -1 THEN s=STRMID(s,0,i+2)+STRMID(s,i+3,STRLEN(s)-(i+3))
ENDREP UNTIL i EQ -1

REPEAT BEGIN
    i=STRPOS(s,'0e') 
    i=i[N_ELEMENTS(i)-1]
    IF i NE -1 THEN s=STRMID(s,0,i)+STRMID(s,i+1,STRLEN(s)-(i+1))
ENDREP UNTIL i EQ -1

REPEAT BEGIN
    i=STRPOS(s,'0d') 
    i=i[N_ELEMENTS(i)-1]
    IF i NE -1 THEN s=STRMID(s,0,i)+STRMID(s,i+1,STRLEN(s)-(i+1))
ENDREP UNTIL i EQ -1

WHILE STRLEN(s) LT w DO s=s+' '

RETURN,s

END

