function f_format, minval, maxval, factor, length On_error,2 if N_params() LT 3 then begin print,'Syntax - fmt = F_FORMAT( minval, maxval, factor, [ length ])' return,'' endif if N_params() LT 4 then length = 5 else length = length > 2 factor = 1. RANGE: if ( maxval GT 0) then begin mxlog = fix( alog10( maxval ) ) mxval = (mxlog>0) + 1 endif else if ( maxval LT 0) then begin mxlog = fix( alog10( abs( maxval ) ) ) mxval = (mxlog>0) + 2 endif else begin mxlog = 0 mxval = 1 endelse if ( minval GT 0 ) then begin mnlog = fix( alog10( minval )) mnval = (mnlog>0) + 1 endif else if ( minval LT 0) then begin mnlog = fix(alog10(abs(minval))) mnval = (mnlog>0) + 2 endif else begin mnlog = 0 mnval = 1 endelse if ( mnlog LT 0 ) and ( mxlog LT 0 ) then begin ;All numbers are < 1.0 expon = max( [ mnlog,mxlog ] ) -1 factor = factor*10.^(expon) maxval = maxval / factor minval = minval / factor goto, RANGE endif dif = abs( mxlog - mnlog ) if ( dif GE length-3 ) then begin mxlen = max([mnlog,mxlog]) factor = factor*10.^(mxlen-(length-3)) abs = 0 endif else begin TEST: tpairv = abs( [mxval,mnval] ) test = max( tpairv ) if ( test LE length-3 ) then begin ;No factor needed abs = length - test - 2 endif else begin expon = min( [mxlog, mnlog] ) if expon EQ 0 then expon = 1 ;Avoid infinite loop factor = factor*10.^(expon) mxval -= expon mnval -= expon goto, TEST endelse endelse if abs EQ 0 then begin factor = factor/10 return,'I' + strtrim(length,2) endif else return,'F' + strtrim( length, 2 ) + '.' + strtrim( abs, 2 ) end