【问题标题】:Always round up to ten in Java在 Java 中总是四舍五入到十
【发布时间】:2018-12-23 17:33:55
【问题描述】:

我还没有找到任何答案。但我想四舍五入到任何数字中的十个。像这样:

32 -> 40
25 -> 30
88 -> 90

但是使用下面的这段代码,我得到了四舍五入。我怎样才能总是四舍五入而不是最接近的十位?

Math.round(number / 10.0) * 10;

【问题讨论】:

    标签: java


    【解决方案1】:

    请参阅我的previous answer 了解如何处理负数的另一个问题。

    要向下舍入到最接近的 10 倍数,只需除以 10 并乘以 10,因为整数除法总是向下舍入(向零)。

    roundDown = value / 10 * 10;
    

    要向上取整,请在向下取整之前加 9。

    roundUp = (value + 9) / 10 * 10;
    

    要四舍五入,请在向下舍入前加 5。

    roundHalfUp = (value + 5) / 10 * 10;
    

    测试

    System.out.println("    Down  Up  Half-Up");
    int[] arr = { 32, 25, 88, 50 };
    for (int v : arr)
        System.out.printf("%2d %4d %4d %5d%n", v, v / 10 * 10, (v + 9) / 10 * 10, (v + 6) / 10 * 10);
    

    输出

        Down  Up  Half-Up
    32   30   40    30
    25   20   30    30
    88   80   90    90
    50   50   50    50
    

    【讨论】:

      【解决方案2】:

      round 可以向上或向下取整,具体取决于余数。相反,您应该使用ceil:

      Math.ceil(number / 10.0) * 10
      

      【讨论】:

        【解决方案3】:

        你可以通过只使用 Java 整数算术来做到这一点:

        x % 10 == 0 ? x : ((x / 10)  + 1) * 10
        

        所以:

        int x = 41;
        int r = x % 10 == 0 ? x : ((x / 10)  + 1) * 10;
        System.out.println(r);
        

        将打印:

        50
        

        【讨论】:

          【解决方案4】:

          从数学上讲,您需要一个值加上十个余数的差。你可以用%(模数)得到余数。喜欢,

          int[] arr = { 32, 25, 88 };
          for (int v : arr) {
              System.out.printf("%d -> %d%n", v, v + (10 - (v % 10)));
          }
          

          输出(按要求)

          32 -> 40
          25 -> 30
          88 -> 90
          

          你说总是四舍五入。如果九十应该保持九十,那么您测试余数为零。喜欢,

          for (int v : arr) {
              int r = v % 10;
              if (r != 0) {
                  System.out.printf("%d -> %d%n", v, v + 10 - r);
              } else {
                  System.out.printf("%d -> %d%n", v, v);
              }
          }
          

          【讨论】:

          • 错误:90 -> 100
          • @Andreas 够公平的。但是OP说总是四舍五入。添加了一个附录。
          猜你喜欢
          • 1970-01-01
          • 2022-01-09
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2012-04-23
          • 2017-12-26
          • 2016-09-07
          相关资源
          最近更新 更多