function s=numberUnits(n) % % NUMBERUNITS(N) Converts a number to a representation with named units % Includes: Atto, Femto, Pico, Nano, Micro, Milli, Kilo, Mega, Giga, Tera, % Peta, Exa. Numbers outside of this range are not converted. % S: is a formatted string % % Note: This function is not efficiently implemented, and serves only as an % exercise for conditionals. error(nargchk(1,1,nargin)); % save original units, and use absolute value until later isneg = 0; if (n < 0) n = abs(n); isneg = 1; end nNew = 0; unit = ''; unitAbbr = ''; % if unit is less than 1, use appropriate scale (milli, micro, ...) if (n < 1) if (n >= 1e-3) nNew = n * 1e3; unit = 'Milli'; unitAbbr = 'm'; elseif (n >= 1e-6) nNew = n * 1e6; unit = 'Micro'; unitAbbr = 'mu'; elseif (n >= 1e-9) nNew = n * 1e9; unit = 'Nano'; unitAbbr = 'n'; elseif (n >= 1e-12) nNew = n * 1e12; unit = 'Pico'; unitAbbr = 'p'; elseif (n >= 1e-15) nNew = n * 1e15; unit = 'Femto'; unitAbbr = 'f'; else nNew = n * 1e18; unit = 'Atto'; unitAbbr = 'a'; end % otherwise, if unit >= 1, use other scale (kilo, mega, ...) else % numbers between 1 and 999.99.. are not converted, and have no units if (n < 1e3) nNew = n; unit = ''; unitAbbr = ''; elseif (n < 1e6) nNew = n / 1e3; unit = 'Kilo'; unitAbbr = 'k'; elseif (n < 1e9) nNew = n / 1e6; unit = 'Mega'; unitAbbr = 'M'; elseif (n < 1e12) nNew = n / 1e9; unit = 'Giga'; unitAbbr = 'G'; elseif (n < 1e15) nNew = n / 1e12; unit = 'Tera'; unitAbbr = 'T'; elseif (n < 1e18) nNew = n / 1e15; unit = 'Peta'; unitAbbr = 'P'; else nNew = n / 1e18; unit = 'Exa'; unitAbbr = 'E'; end end % return original units if (isneg) nNew = -nNew; end % formatted string; note that number 32 is the space character, and is only % placed in the string to produce a space % s is the returned value for this function s = strcat(num2str(nNew), 32, unitAbbr, ' (', unit, ')');