29

Java プログラムの中で、100 の位まで切り上げる必要がある部分に来て、おそらくそれを行う方法があると思いましたが、そうではないと思います。だから私は例や答えをネットで検索しましたが、すべての例は最も近い百のように見えるので、まだ見つけていません。私はこれをして切り上げたいだけです。たぶん、私が見落としているいくつかの簡単な解決策があります。他の機能を試してMath.ceilみましたが、まだ答えが見つかりません。誰かがこの問題で私を助けることができれば、私はそれを大いに感謝します.

私の番号が 203 の場合、四捨五入した結果が 300 になるようにします。

  1. 801->900
  2. 99->100
  3. 14->100
  4. 452->500
4

11 に答える 11

63

商の小数部分を切り捨てる整数除算を利用します。四捨五入しているように見せるには、最初に 99 を足します。

int rounded = ((num + 99) / 100 ) * 100;

例:

801: ((801 + 99) / 100) * 100 → 900 / 100 * 100 → 9 * 100 = 900
99 : ((99 + 99) / 100) * 100 → 198 / 100 * 100 → 1 * 100 = 100
14 : ((14 + 99) / 100) * 100 → 113 / 100 * 100 → 1 * 100 = 100
452: ((452 + 99) / 100) * 100 → 551 / 100 * 100 → 5 * 100 = 500
203: ((203 + 99) / 100) * 100 → 302 / 100 * 100 → 3 * 100 = 300
200: ((200 + 99) / 100) * 100 → 299 / 100 * 100 → 2 * 100 = 200

関連するJava 言語仕様の引用、セクション 15.17.2 :

整数除算は 0 に向かって丸められます。つまり、2 進数値昇格 (§5.6.2) 後の整数であるオペランド n と d に対して生成される商は、|d · q| を満たしながら、その大きさができるだけ大きい整数値 q です。≤ |n|。

于 2013-08-23T16:29:52.667 に答える
11

これは、「倍数」の場合に機能すると私が信じているアルゴリズムです。どう考えているか教えてください。

int round (int number,int multiple){

    int result = multiple;

    //If not already multiple of given number

    if (number % multiple != 0){

        int division = (number / multiple)+1;

        result = division * multiple;

    }

    return result;

}
于 2013-08-24T07:10:30.863 に答える
1

OCの回答にコメントを追加するほどの評判はありませんが、次のようにする必要があると思います。

if (number % multiple != 0) {
    int division = (number / multiple) + 1;
    result = division * multiple;
} else {
    result = Math.max(multiple, number);
}

else使用して、たとえばround(9, 3) = 9、そうでない場合はround(9, 3) = 3

于 2016-09-21T09:33:14.420 に答える
0

以下のコードは、整数を次の 10 または 100 または 500 または 1000 などに丸めるのに役立ちます。

public class MyClass {
    public static void main(String args[]) {
        int actualValue = 34199;
        int nextRoundedValue = 500 // change this based on your round requirment ex: 10,100,500,...
        int roundedUpValue = actualValue;

        //Rounding to next 500
        if(actualValue%nextRoundedValue != 0)
          roundedUpValue =
(((actualValue/nextRoundedValue)) * nextRoundedValue) + nextRoundedValue;
         System.out.println(roundedUpValue);
    }
}
于 2018-02-28T05:55:24.940 に答える