第一轮,带着领带,第二轮

我发表了Round, tie to Even几天前。Steve Eddins和Daniel Dolan立即发表了实质性的评论。以下是我对他们评论的回应。

内容

两个

我描述的打破平局的四个选择——“偶数”、“奇数”、“上”和“下”——对于正数和负数都有相同的行为。当前的内置使用“向上”规则。

史蒂夫认为有必要增加两个对数字符号敏感的选项。我称之为“加号”和“减号”。他们在数轴上向左右转。这有时被称为正无穷和负无穷。

样本

这是一些数值的图表。

x = (-4.5:1:4.5) ';xRound (x);
x围捕下偶奇+ -3.500 - -4.500 5 5 4 4 5 4 5 4 4 3 3 3 4 -2.500 - 3 3 2 2 3 2 3 -1.500 - 2 2 1 2 1 1 2 1 1 0 0 1 0 1 0.500 -0.500 1.500 1 1 0 0 1 1 0 2 2 1 2 1 2 1 3.500 2.500 3 3 2 2 3 3 2 4 5 4 3 4 3 4 3 4.500 5 4 4 5 5 4

和情节。

扩展

当前的内置还包括按10的幂缩放的可能性,以方便舍入,比如,1000的最接近倍数,或1/1000,或三个有效数字。Daniel担心在同一个函数中同时使用缩放和打破连接选项会让人感到困惑。

但是,我认为这没关系,因为:

  • 轮(x,“甚至”),参数“甚至”是一个字符
  • 轮(x, 3),参数3.是数字。
  • 轮(x 3 '重大'),参数“重要的”是一个特定的字符

因此,语句

  • 轮(x,“甚至”,3)
  • 轮(x, 3,“甚至”)
  • 轮(x,“甚至”3“显著的”)

是明确和可区分的。后x,其他参数可以按任何顺序给出。

这是我关于增强请求的建议.它是可用的在这里

类型round.m
函数r = round(varargin) % r = round(x)缩放并将x的元素舍入到最接近的整数。默认值:tie,整数中间的元素,从0四舍五入。% % r = round(x,'even')表示整数为偶数。% r = round(x,'odd')是奇数。% r = round(x,'up')从0开始取整(与默认值相同)。% r = round(x,'down')将四舍五入归零。% r = round(x,'plus')在数轴上向右。% r = round(x,'minus')在数轴上向左系。% % 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 = round(x,n,'significant'), round(.001234,2,'significant') = .0012 . (x,n,'decimal ')与round(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; 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




发布与MATLAB®R2021a

|

评论

要留下评论,请点击在这里登录到您的MathWorks帐户或创建一个新帐户。