Anda harus benar-benar menjelaskan "tidak berfungsi" secara lebih rinci. Apa yang terjadi? Apa yang tidak terjadi? Apa yang kamu harapkan? Kesalahan apa yang Anda dapatkan? Apakah Anda memiliki round()metode di kelas yang sama? Benarkah import static java.lang.Math.*? Dll .. Ada banyak cara untuk membulatkan angka dan dengan demikian juga banyak kemungkinan jawaban. Dengan kata lain, pertanyaan Anda tidak jelas dan ambigu dan tidak dapat dijawab secara wajar dalam bentuknya saat ini. Ini menembak dalam kegelapan.
BalusC
1
Apakah "tidak berfungsi" berarti tidak membulatkan ke int terdekat, atau mengeluarkan pengecualian, atau tidak membulatkan ke atas / ke bawah? Pertanyaan ini tidak berguna tanpa harus merujuksilangkan konteks dengan jawabannya.
modulitos
Jawaban:
239
Apa jenis kembalian round()metode dalam cuplikan?
Jika ini adalah Math.round()metodenya, ia mengembalikan Long ketika parameter inputnya adalah Double.
Pertimbangkan untuk menggunakan Math.toIntExact (long) daripada hanya mentransmisikan ke int; dobel dapat menampung cukup banyak nilai dan Anda mungkin tidak ingin diam-diam membuang bit paling signifikan jika kembaran Anda lebih besar dari yang Anda harapkan.
othp
Saya percaya pemeran tidak perlu. Saya tidak tahu apakah itu di masa lalu, tetapi putaran tidak mengembalikan int.
Putus
@Dropout Math.round mengembalikan int jika Anda memberikan pelampung, dan panjang jika Anda memberikannya ganda.
Tur1ng
27
Jika Anda tidak menyukai Math.round () Anda dapat menggunakan pendekatan sederhana ini juga:
Solusi ini lebih pendek, tidak perlu diimpor dan mudah dibawa ke banyak bahasa pemrograman lain dengan sedikit perubahan. Dan bahkan mungkin lebih cepat tergantung pada platform Anda: stackoverflow.com/questions/12091014/…
Dr. Daniel Thommes
1
Saya tidak mengkritik jawaban Anda, yang menurut saya sangat berguna untuk alasan yang Anda sebutkan. Saya, dengan komentar ini, menyapa orang-orang yang takut untuk menggunakan Math.round(), yang secara "harfiah" sama dengan solusi yang Anda berikan, itu saja. Bersulang.
Gauthier Boaglio
2
Ya, seperti yang dikatakan nehz, saya yakin ini akan membulatkan -2,1 menjadi -1, misalnya.
Ben Aaronson
5
@AlbertoHormazabal, apakah Anda tidak memperhatikan bahwa dia menambahkan 0.5?
Sasha
11
Membulatkan dua kali lipat ke bilangan bulat "terdekat" seperti ini:
1.4 -> 1
1,6 -> 2
-2,1 -> -2
-1,3 -> -1
-1,5 -> -2
privateint round(double d){double dAbs =Math.abs(d);int i =(int) dAbs;double result = dAbs -(double) i;if(result<0.5){return d<0?-i : i;}else{return d<0?-(i+1): i+1;}}
Anda dapat mengubah kondisi (hasil <0,5) sesuai keinginan.
Saya setuju dengan jawaban anivaler. Tetapi jika Anda hanya perlu membulatkan ke bilangan bulat tertinggi, Anda bisa seperti di bawah ini: double decimalNumber = 4,56777; System.out.println (Float baru (Math.round (decimalNumber))); Hasil: 5
Smeet
3
import java.math.*;publicclassTestRound11{publicstaticvoid main(String args[]){double d =3.1537;BigDecimal bd =newBigDecimal(d);
bd = bd.setScale(2,BigDecimal.ROUND_HALF_UP);// output is 3.15System.out.println(d +" : "+ round(d,2));// output is 3.154System.out.println(d +" : "+ round(d,3));}publicstaticdouble round(double d,int decimalPlace){// see the Javadoc about why we use a String in the constructor// http://java.sun.com/j2se/1.5.0/docs/api/java/math/BigDecimal.html#BigDecimal(double)BigDecimal bd =newBigDecimal(Double.toString(d));
bd = bd.setScale(decimalPlace,BigDecimal.ROUND_HALF_UP);return bd.doubleValue();}}
Fungsi Math.round kelebihan beban Ketika menerima nilai float, itu akan memberi Anda int. Misalnya ini akan berhasil.
int a=Math.round(1.7f);
Ketika menerima nilai ganda, itu akan memberi Anda panjang, oleh karena itu Anda harus mengetikkannya ke int.
int a=(int)Math.round(1.7);
Ini dilakukan untuk mencegah hilangnya presisi. Nilai ganda Anda adalah 64bit, tetapi kemudian variabel int Anda hanya dapat menyimpan 32bit sehingga hanya mengubahnya menjadi panjang, yaitu 64bit tetapi Anda dapat mengetikkannya menjadi 32bit seperti yang dijelaskan di atas.
Anda benar-benar perlu memposting contoh yang lebih lengkap, sehingga kami dapat melihat apa yang Anda coba lakukan. Dari apa yang Anda posting, inilah yang dapat saya lihat. Pertama, tidak ada round()metode bawaan. Anda perlu memanggil Math.round(n), atau mengimpor secara statis Math.round, lalu memanggilnya seperti yang Anda lakukan.
round()
metode di kelas yang sama? Benarkahimport static java.lang.Math.*
? Dll .. Ada banyak cara untuk membulatkan angka dan dengan demikian juga banyak kemungkinan jawaban. Dengan kata lain, pertanyaan Anda tidak jelas dan ambigu dan tidak dapat dijawab secara wajar dalam bentuknya saat ini. Ini menembak dalam kegelapan.Jawaban:
Apa jenis kembalian
round()
metode dalam cuplikan?Jika ini adalah
Math.round()
metodenya, ia mengembalikan Long ketika parameter inputnya adalah Double.Jadi, Anda harus memberikan nilai pengembalian:
sumber
Jika Anda tidak menyukai Math.round () Anda dapat menggunakan pendekatan sederhana ini juga:
sumber
Math.round()
: stackoverflow.com/a/6468757/1715716Math.round()
, yang secara "harfiah" sama dengan solusi yang Anda berikan, itu saja. Bersulang.0.5
?Membulatkan dua kali lipat ke bilangan bulat "terdekat" seperti ini:
1.4 -> 1
1,6 -> 2
-2,1 -> -2
-1,3 -> -1
-1,5 -> -2
Anda dapat mengubah kondisi (hasil <0,5) sesuai keinginan.
sumber
sumber
Fungsi Math.round kelebihan beban Ketika menerima nilai float, itu akan memberi Anda int. Misalnya ini akan berhasil.
Ketika menerima nilai ganda, itu akan memberi Anda panjang, oleh karena itu Anda harus mengetikkannya ke int.
Ini dilakukan untuk mencegah hilangnya presisi. Nilai ganda Anda adalah 64bit, tetapi kemudian variabel int Anda hanya dapat menyimpan 32bit sehingga hanya mengubahnya menjadi panjang, yaitu 64bit tetapi Anda dapat mengetikkannya menjadi 32bit seperti yang dijelaskan di atas.
sumber
Dokumentasi
Math.round
mengatakan:Tidak perlu melakukan cast ke
int
. Mungkin sudah berubah dari masa lalu.sumber
sumber
Anda benar-benar perlu memposting contoh yang lebih lengkap, sehingga kami dapat melihat apa yang Anda coba lakukan. Dari apa yang Anda posting, inilah yang dapat saya lihat. Pertama, tidak ada
round()
metode bawaan. Anda perlu memanggilMath.round(n)
, atau mengimpor secara statisMath.round
, lalu memanggilnya seperti yang Anda lakukan.sumber