函数r =圆(变长度输入宗量)% r =圆(x)尺度和轮x的元素到最近的整数。%违约:关系,元素中间整数,圆形远离零。% % r =圆(x,“甚至”)关系转到偶数。% r =圆(x,“奇怪的”)关系转到奇数。% r =圆(x,“了”)关系从0(默认)一样。% r =圆(x,“下来”)关系为零。% r =圆(x,“+”)向右轮在数轴上的关系。% r =圆(x,‘-’)向左轮在数轴上的关系。% % r =圆(x, n)、n > = 0,轮(10 ^ n * x) / 10 ^ n,圆(12.3456,2)= 12.3500% r =圆(x - n)、n > 0, 10 ^ n * (x / 10 ^ n),圆(1234.56,2)= 1200。% r =圆(x, n,“重要”),圆(.001234 2 '重大')= .0012 % r =圆(x, n,“小数)一样(x, n)。 % % r = round(x,...), ties, n, 'significant' and 'decimals' can be in any order. % % Use Round(...) with capital R to distinguish from built-in round(...). [x,n,ties] = parse_input(varargin{:}); x = prescale(x,n); a = abs(x) + (0.5-eps/4); r = floor(a); switch ties case 'even' m = (r == a) & (mod(r,2) == 1); case 'odd' m = (r == a) & (mod(r,2) == 0); case 'down' m = (r == a); case 'up' m = []; case 'plus' m = (x < 0) & (r == a); case 'minus' m = (x > 0) & (r == a); otherwise error(['''' ties ''' not recognized.']) end r(m) = r(m) - 1; r = sign(x).*r; r = postscale(r,n); % ---------------------------------------------- function [x,n,ties] = parse_input(varargin) x = varargin{1}; n = zeros(size(x)); ties = 'up'; for k = 2:nargin if isnumeric(varargin{k}) n(:) = varargin{k}; elseif strcmp(varargin{k},'significant') n(:) = n(:) - ceil(log10(abs(x(:)))); elseif strcmp(varargin{k},'decimals') % ignore else ties = varargin{k}; end end end function x = prescale(x,n) if any(n ~= 0) k = n > 0; x(k) = 10.^n(k).*x(k); k = n < 0; x(k) = x(k)./10.^(-n(k)); end end function r = postscale(r,n) if any(n ~= 0) k = n > 0; r(k) = r(k)./10.^n(k); k = n < 0; r(k) = 10.^(-n(k)).*r(k); end end end