Javaは任意の数を切り上げる


146

簡単な質問について私が探している答えが見つからないようです。どのようにして数値を最も近い値に切り上げるのintですか?

たとえば、数値が0.2、0.7、0.2222、0.4324、0.99999の場合は常に、結果を1にしたいと思います。

これまでのところ

int b = (int) Math.ceil(a / 100);

しかし、それは仕事をしていないようです。


サンプルコードでなぜ100で除算しているのですか?
Jon Skeet、2010

14
たぶんあなたaは整数型を持っています。
Nikita Rybak 2010

1
ええ、あなたの右aはint ...指摘してくれてありがとう。100.0でソートされました。
Stevanicus 2010

1
私は彼が望んでいるものは100を切り上げたものだと思いますが、そうです、質問はいくつかの説明を使用することができます。
Jay

1
注:この質問では、より適切な回答が提供されます。
martijnn2008

回答:


289

Math.ceil()呼び出す正しい関数です。私aは、整数演算inta / 100実行するであると推測しています。Math.ceil(a / 100.0)代わりに試してください。

int a = 142;
System.out.println(a / 100);
System.out.println(Math.ceil(a / 100));
System.out.println(a / 100.0);
System.out.println(Math.ceil(a / 100.0));
System.out.println((int) Math.ceil(a / 100.0));

出力:

1
1.0
1.42
2.0
2

http://ideone.com/yhT0lを参照してください


3
これは、「a」が2つの場合のみ
L.グリロ

^^ "a"はdoubleであるか、doubleをキャストする必要があります。
2017年

1
aint、この例では、と示唆されているようにそれが動作します。出力に示されているようにint / float、結果はfloatです。リンクを試してください。
ダンティストン2017

16

なぜ100で割っているのかわかりませんが、ここでは私の仮定 int a;

int b = (int) Math.ceil( ((double)a) / 100);

または

int b = (int) Math.ceil( a / 100.0);

11
int RoundedUp = (int) Math.ceil(RandomReal);

これは完璧な仕事をしているように見えました。いつも働いていました。


2

10年後、その問題はまだ私を捕まえました。

だから、これは私には遅すぎる人たちへの答えです。

これは動作しません

int b = (int) Math.ceil(a / 100);

結果a / 100は整数であることがわかり、Math.ceilがそれについて何も実行できないように丸められます。

これで丸め操作を回避する必要があります

int b = (int) Math.ceil((float) a / 100);

今では動作します。


0

これを行う最も簡単な方法は、フロートまたはダブルを受け取り、それを最も近い切り上げに変換して、 System.out.println((int)Math.ceil(yourfloat)); 完全に機能するようにすることです。


-3

aをdoubleと仮定し、小数点以下のない丸められた数値が必要です。Math.round()関数を使用します。
これは私の解決策です。

double a = 0.99999;
int rounded_a = (int)Math.round(a);
System.out.println("a:"+rounded_a );

Output : 
a:1

1
これは間違った答えです
。a
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.