Java Kumpulkan Nomor Apapun

146

Sepertinya saya tidak dapat menemukan jawaban yang saya cari mengenai pertanyaan sederhana: bagaimana cara mengumpulkan angka ke yang terdekat int?

Misalnya, setiap kali angkanya 0,2, 0,7, 0,2222, 0,4324, 0,99999 saya ingin hasilnya menjadi 1.

Sejauh ini saya punya

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

Tampaknya tidak melakukan pekerjaan itu.

Stevanicus
sumber
Mengapa Anda membaginya dengan 100 dalam kode sampel Anda?
Jon Skeet
14
Saya yakin Anda amemiliki tipe integer.
Nikita Rybak
1
ya benar a adalah int ... terima kasih telah menunjukkan itu. 100.0 mengurutkannya untukku.
Stevanicus
1
Saya kira yang dia inginkan adalah angka 100, tetapi ya, pertanyaannya bisa menggunakan beberapa klarifikasi.
Jay
1
CATATAN: Pada ini pertanyaan jawaban yang lebih baik disediakan.
martijnn2008

Jawaban:

289

Math.ceil()adalah fungsi yang benar untuk dipanggil. Saya menduga aadalah int, yang akan membuat a / 100melakukan bilangan aritmatika. Coba Math.ceil(a / 100.0)saja.

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));

Output:

1
1.0
1.42
2.0
2

Lihat http://ideone.com/yhT0l

moinudin
sumber
3
ini hanya jika "a" dua kali lipat
L.Grillo
^^ "a" harus ganda atau ganda.
Codeversed
1
aadalah intdalam contoh ini, dan berfungsi seperti yang disarankan. Ketika melakukan int / floathasilnya adalah float, seperti yang ditunjukkan dalam output. Coba tautannya.
dantiston
16

Saya tidak tahu mengapa Anda membagi 100 tetapi di sini asumsi saya int a;

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

atau

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

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

Ini sepertinya melakukan pekerjaan yang sempurna. Bekerja setiap saat.

Liehan Els
sumber
2

10 tahun kemudian, tetapi masalah itu masih menyita perhatian saya.

Jadi ini adalah jawaban untuk mereka yang terlambat seperti saya.

Ini tidak bekerja

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

Penyebab hasilnya a / 100 ternyata bilangan bulat dan bulat sehingga Math.ceil tidak bisa berbuat apa-apa.

Anda harus menghindari operasi bulat dengan ini

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

Sekarang berhasil.

Reginaldo Rigo
sumber
0

Cara termudah untuk melakukan ini adalah hanya: Anda akan menerima pelampung atau dobel dan ingin itu dikonversi ke putaran terdekat kemudian lakukan saja System.out.println((int)Math.ceil(yourfloat)); itu akan bekerja dengan sempurna

LouieAdauto
sumber
-3

Dengan asumsi dua kali lipat dan kita perlu angka bulat tanpa tempat desimal. Gunakan fungsi Math.round ().
Ini berjalan sebagai solusi saya.

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

Output : 
a:1
Ankit Chauhan
sumber
1
Ini adalah jawaban yang salah, seperti yang diminta di sini untuk mengumpulkan jika a = 0,2 hasilnya akan 0
Mohamed23gharbi