代码之家  ›  专栏  ›  技术社区  ›  Graviton

最接近50的天花板

  •  10
  • Graviton  · 技术社区  · 14 年前

    我可以绕过 A 到大于或等于的最近整数

    ceil(A)
    

    但是如果我想把它四舍五入到最接近的50大于或等于 ?

    例如,假设 数组,

    A=[24, 35, 78, 101, 199];
    

    子例程应返回以下内容

    B=Subroutine(A)=[50, 50, 100, 150, 200];
    
    2 回复  |  直到 14 年前
        1
  •  15
  •   Jonathan Dursi    14 年前

    你只需除以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
    
        2
  •  8
  •   Pi Delport    14 年前

    一个简单的方法是将每个数的补码模加上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
    

    (请注意,这只取决于整数算术,它可以避免由于浮点舍入而导致的错误。)

    推荐文章