from
disk, memory caching - store objects by arbitrary key
by Mark Histed
Store any matlab objects to disk or keep them in memory, indexed by arbirary objects.
|
| num2str_metric(inNum, numSigDigits, formatStr)
|
function outStr = num2str_metric(inNum, numSigDigits, formatStr)
%NUM2STR_METRIC: convert num to a str with metrix postfixes
% outStr = num2str_metric(inNum)
%
% if inNum is between 10^3 and 10^6, M will be appended, etc.
%
%$Id: num2str_metric.m 125 2008-03-20 20:19:22Z vincent $
if nargin < 2, numSigDigits = []; end
if nargin < 3, formatStr = '%g'; end
if inNum == 0; outStr = '0'; return; end % special case->log(0) bad
minPower10 = floor(log10(inNum));
if minPower10 >= -15 && minPower10 < -12
postfix = 'f';
powOf10 = -15;
elseif minPower10 >= -12 && minPower10 < -9
postfix = 'p';
powOf10 = -12;
elseif minPower10 >= -9 && minPower10 < -6
postfix = 'n';
powOf10 = -9;
elseif minPower10 >= -6 && minPower10 < -3
postfix = 'u';
powOf10 = -6;
elseif minPower10 >= -3 && minPower10 < 0
postfix = 'm';
powOf10 = -3;
elseif minPower10 >= 0 && minPower10 < 3
% do nothing, less than one thousand
postfix = '';
powOf10 = 0;
elseif minPower10 >= 3 && minPower10 < 6
postfix = 'k';
powOf10 = 3;
elseif minPower10 >= 6 && minPower10 < 9
postfix = 'M';
powOf10 = 6;
elseif minPower10 >= 9 && minPower10 < 12
postfix = 'G';
powOf10 = 9;
elseif minPower10 >= 12 && minPower10 < 15
postfix = 'T';
powOf10 = 12;
end
convNum = inNum ./ 10.^powOf10;
if ~isempty(numSigDigits)
convNum = chop(convNum, numSigDigits);
end
outStr = sprintf([formatStr postfix], convNum);
if any(lower(outStr) == 'e')
warning('Number out of range, define more metric prefixes');
% fallback
outStr = sprintf('%g', inNum);
end
|
|
Contact us at files@mathworks.com