📄 tostr.m
字号:
% TOSTR: Converts a vector of integer or real numbers to a text matrix.
%
% Syntax: textmat = tostr(A,{digits},{leftjust})
%
% A = single matrix to be converted.
% digits = optional number of significant digits [default=8].
% leftjust = optional booloean flag indicating, if true, that values are
% to be left justified within text string (i.e., padded with
% blanks on the right) [default = 0 = right-justified].
% ------------------------------------------------------------------------
% textmat = corresponding matrix of text strings.
%
% RE Strauss, 6/24/98
% 1/10/00 - allow to specify extra appended digits of zeros.
function textmat = tostr(A,digits,leftjust)
if (nargin < 2) digits = []; end;
if (nargin < 3) leftjust = []; end;
digits_given = 1;
if (isempty(digits))
digits = 8;
digits_given = 0;
end;
if (isempty(leftjust))
leftjust = 0;
end;
[r,c] = size(A);
if (min([r c]) > 1)
error(' TOSTR: numeric input must be a vector');
elseif (r==1) % Transpose row vector to column vector
A = A';
end;
lenA = length(A);
all_finite = 1;
if (any(~finite(A))) % If any missing values,
miss = find(~finite(A)); % Save position
A(miss) = ones(length(miss),1); % Temporarily replace by ones
all_finite = 0;
end;
minA = min(A); % Min & max values
maxA = max(abs(A));
if (maxA < eps) % Substitute eps for max of vector of zeros
maxA = eps;
end;
B = A;
if (~all_finite)
A(miss) = NaN * ones(length(miss),1); % Restore missing values
end;
f = max(floor(log10(maxA)+eps)+1,1); % Number of digits before decimal point
d = max([digits-f;zeros(1,length(f))]); % Number of digits after decimal point
if (minA < 0) % If any values <0,
f = f+1; % allow for sign
end;
if (maxA < 1) % If all values < 1, allow full number of digits
d = d+1; % despite leading zero
end;
if (~digits_given & isintegr(B)) % If vector of all integers
w = f;
d = 0;
editstr = ['%',int2str(w),'.0f'];
else % If real numbers, full number of digits
if (~digits_given)
epsilon = 10.^(-d-1);
for k = 1:d
BB = B * 10^k;
e = epsilon * 10^k;
if (isintegr(BB,e))
d = k;
break;
end;
end;
end;
w = f+d+1;
editstr = ['%',int2str(w),'.',int2str(d),'f'];
end;
textmat = []; % Prepare for conversion to string
for i = 1:lenA % Loop through numeric values
if (finite(A(i))) % If value is numeric,
s = sprintf(editstr,A(i)); % Convert number to string
if (leftjust) % If value is to be left-justified in string,
bl = isspace(s); % Find positions of blanks
cbl = sum(bl); % Count number of blanks
s = [s(~bl), blanks(cbl)]; % Move non-blanks forward, pad behind with blanks
end;
textmat = [textmat; s]; % Append onto output matrix
else % Else if values is not finite,
textmat = [textmat; blanks(w)]; % Use string of blanks
end;
end;
return;
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -