天花板到最近的50

Gra*_*ton 10 matlab rounding

我可以将元素舍入A到大于或等于的最接近的整数A

ceil(A)
Run Code Online (Sandbox Code Playgroud)

但是,如果我想将它舍入到最接近的50大于或等于A

例如,给定以下A数组,

A=[24, 35, 78, 101, 199];
Run Code Online (Sandbox Code Playgroud)

子程序应返回以下内容

B=Subroutine(A)=[50, 50, 100, 150, 200];
Run Code Online (Sandbox Code Playgroud)

Jon*_*rsi 15

你可以除以50,取ceil(),再乘以50:

  octave:1> A=[24, 35, 78, 101, 199];
  octave:2> ceil(A)
  ans =

    24    35    78   101   199

  octave:3> 50*(ceil(A/50.))
  ans =

    50    50   100   150   200
Run Code Online (Sandbox Code Playgroud)


Pi *_*ort 8

一个简单的方法是只添加每个数字的补码模数50:

octave> A = [24, 35, 78, 101, 199] 

octave> mod(-A, 50)       # Complement (mod 50)
ans =

   26   15   22   49    1

octave> A + mod(-A, 50)   # Sum to "next higher" zero (mod 50)
ans =

    50    50   100   150   200

octave> A - mod(A, 50)    # Can also sum to "next lower" zero (mod 50)
ans =

     0     0    50   100   150
Run Code Online (Sandbox Code Playgroud)

(注意,这仅取决于整数运算,这避免了由于浮点舍入引起的错误.)

  • 我喜欢这个,因为它利用了模加/减,即没有乘法/除法.但是,如果您有一个复杂的表达式代替A,您可能希望恢复到使用ceil函数的解决方案,因为该表达式只会在该方法中调用一次.所有这些都是为了简化代码. (2认同)