www.gusucode.com > 利用MATLAB GUI设计滤波器界面,可以设计IIR滤波器 > AFD/Utility_EngOutput.m

    function [argOut1, argOut2] = Utility_EngOutput(num, arg1,arg2,low,high)
% Utility_EngOutput is a subfile of the AnalogFilter GUI collection
% Examples:
% EngOutput(123456) returns '123.4k' (by default uses 4 sig digits)
% EngOutput(123456,3) returns '123k' (sig digits specified)
% EngOutput(12343456,'Ohms') returns '123.4kOhms' 
% EngOutput(123456,3,'Ohms') returns '123kOhms' 
% EngOutput(1,'F',4,-12,-6) limits the response between pF and uF (i.e. '1.000e6uF')
% [sMan, nExp] = EngOutput(1e-6,'F',4,-12,-6) returns sMan='1' and nExp=-6

% James C. Squire, Assistant Professor, Virginia Military Institute
% ver 1.0

% Constants
DEFAULTSIGDIGITS = 4;
SUFFIXLIST = 'afpnum kMGTPE'; % atto, femto, pico, nano, etc.
INEUTRAL = 7;                 % index of 1's place in above list
% if passed a null argument
if isempty(num)
    argOut1='';
    argOut2=[];
    return
end
% check for infinities
if isinf(num)
    if num==inf
        argOut1 = 'Infinity';
    else
        argOut1 = -'Infinity';
    end
    argOut2 = [];
    return
end   
% sort out input form
nSigDigits = DEFAULTSIGDIGITS;
sUserSuffix = '';
if nargin > 1
    if ischar(arg1)
        sUserSuffix = arg1;
    else
        nSigDigits = arg1;
    end
end
if nargin==3
    if ischar(arg2)
        sUserSuffix = arg2;
    else
        nSigDigits = arg2;
    end
end 
if isempty(nSigDigits) || (nSigDigits ~= round(nSigDigits)) || nSigDigits<0 || nSigDigits>12
    warning(['Incorrect form of significant digits in ' mfilename]);
    nSigDigits = DEFAULTSIGDIGITS;
end
if nargin<4
    low = -inf;
    high = inf;
end
% check for zeros
if num==0
    if nargout <2
        argOut1 = ['0 ' sUserSuffix];
    else
        argOut1 = '0';
        argOut2 = 0;
    end
    return
end
% find the exponent string
maxI = min((length(SUFFIXLIST) - INEUTRAL), high/3);
minI = max(1-INEUTRAL, low/3);
iSuffix = floor(log10(abs(num))/3);
if iSuffix > maxI, iSuffix = maxI; end
if iSuffix < minI, iSuffix = minI; end
sExp = SUFFIXLIST(iSuffix + INEUTRAL);
if sExp == ' ', sExp = ''; end % if no exponent, remove the space
% find the mantissa string
mantissa = num/10^(3*iSuffix);
sForm = ['%0.' num2str(nSigDigits) 'g'];
sMantissa = sprintf(sForm, mantissa);
% assemble
if nargout <2
    argOut1 = [sMantissa ' ' sExp sUserSuffix];
else
    argOut1 = sMantissa;
    argOut2 = iSuffix*3;
end