【问题标题】:Round an int to the nearest in 5X Table?在 5X 表中将 int 舍入到最接近的值?
【发布时间】:2012-04-08 12:34:02
【问题描述】:

在我的 iPhone 应用程序中,我需要将整数四舍五入到最接近 5 的倍数。

例如第 6 轮到 = 10 和第 23 轮到 = 25 等等

编辑

我忘了说,我只想围捕!在所有情况下,例如,22 会四舍五入到 25。

【问题讨论】:

    标签: iphone objective-c ios cocoa ipad


    【解决方案1】:

    如果你想总是四舍五入,你可以使用以下:

    int a = 22;
    int b = (a + 4) / 5 * 5; // b = 25;
    

    如果a 可以是浮点数,则应向int 添加强制转换,如下所示:

    int b = ((int)a + 4) / 5 * 5; // b = 25;
    

    请注意,您可以使用函数ceil 来完成相同的结果:

    int a = 22;
    int b = ceil((float)a / 5) * 5; // b = 25;
    

    旧答案:

    要四舍五入到最接近的5 的倍数,您可以执行以下操作:

    int a = 23;
    int b = (int)(a + 2.5) / 5 * 5;
    

    【讨论】:

    • 将 (int) 放在 sum 前面有什么作用?
    • Doh,忘了提一个关键信息。我总是想四舍五入,稍微编辑一下我的问题。 (感谢您的回答!)
    【解决方案2】:

    使用:

    int rounded = (i%5==0) ? i : i+5-(i%5);
    

    示例:

        for (int i=1; i<25; i++)
        {
            int k= (i%5==0) ? i : i+5-(i%5);
    
            printf("i  : %d => rounded : %d\n",i,k);
        }
    

    输出:

    i  : 1 => rounded : 5
    i  : 2 => rounded : 5
    i  : 3 => rounded : 5
    i  : 4 => rounded : 5
    i  : 5 => rounded : 5
    i  : 6 => rounded : 10
    i  : 7 => rounded : 10
    i  : 8 => rounded : 10
    i  : 9 => rounded : 10
    i  : 10 => rounded : 10
    i  : 11 => rounded : 15
    i  : 12 => rounded : 15
    i  : 13 => rounded : 15
    i  : 14 => rounded : 15
    i  : 15 => rounded : 15
    i  : 16 => rounded : 20
    i  : 17 => rounded : 20
    i  : 18 => rounded : 20
    i  : 19 => rounded : 20
    i  : 20 => rounded : 20
    i  : 21 => rounded : 25
    i  : 22 => rounded : 25
    i  : 23 => rounded : 25
    i  : 24 => rounded : 25
    

    【讨论】:

      【解决方案3】:

      斯威夫特 3

      extension Int {
          func nearestFive() -> Int {
              return (self + 4) / 5 * 5
          }
      }
      

      使用

      let a = 23.nearestFive()
      print(a) // 25
      

      【讨论】:

        【解决方案4】:

        要向上舍入到 5 的下一个倍数,例如,可以使用以下命令:

        (int) (5.0 * ceil((number/5.0)))
        

        【讨论】:

          【解决方案5】:

          你可能不需要这个问题的另一个答案,但我个人认为这更整洁:

          int ans = ceil(input / 5.0) * 5.0;
          

          【讨论】:

            【解决方案6】:

            对于整数解决方案,使用 mod 5 偏置 4 进行舍入:

            int i;
            int i5;
            
            i = 6;
            i5 = i + 4 - ((i+4) % 5);
            NSLog(@"i: %i, i5: %i", i, i5);
            
            i = 22;
            i5 = i + 4 - ((i+4) % 5);
            NSLog(@"i: %i, i5: %i", i, i5);
            NSLog output:  
            

            i:6,i5:10
            i: 22, i5: 25

            【讨论】:

              【解决方案7】:

              由于只需要四舍五入的整数,num+5-(num%5) 就足够了。

              旧答案

              我对objective-c知之甚少,但这还不够。

              r = num%5
              r > 2 ? num+5-r : n-r
              

              【讨论】:

              • 对不起,我在我的问题中犯了一个愚蠢的错误,感谢您的回答,我已经改变了我的问题。
              • 那么 6 呢?它应该四舍五入到 10 还是 5。如果 6 应该四舍五入到 10,您应该再次编辑您的问题。如果是这种情况,答案将简单地变为“num+5-(num%5)”。跨度>
              猜你喜欢
              • 1970-01-01
              • 2016-07-22
              • 1970-01-01
              • 2016-05-25
              • 1970-01-01
              • 2014-12-08
              • 2017-04-29
              • 1970-01-01
              • 2010-12-10
              相关资源
              最近更新 更多