Saya memiliki metode Hibernate yang mengembalikan saya BigDecimal. Saya memiliki metode API lain yang harus saya lewati angka itu tetapi menerima Integer sebagai parameter. Saya tidak bisa mengubah tipe pengembalian atau tipe variabel dari kedua metode.
Sekarang bagaimana cara mengubah BigDecimal menjadi Integer dan meneruskannya ke metode kedua?
Apakah ada jalan keluar dari ini?
java
integer
casting
bigdecimal
Vishal
sumber
sumber
Jawaban:
Anda akan menelepon
myBigDecimal.intValueExact()
(atau hanyaintValue()
) dan bahkan akan mengeluarkan pengecualian jika Anda akan kehilangan informasi. Yang mengembalikan int tetapi autoboxing mengurusnya.sumber
intValueExact()
adalah rekomendasi yang bagus; itu ditambahkan dalam 1,5intValue()
itu berbahaya kecuali jika Anda 100% mempertaruhkan hidup Anda untuk itu positif bahwa angkanya ada dalamInteger
kisaran.Bisakah Anda menjamin bahwa
BigDecimal
tidak akan pernah mengandung nilai lebih besar dariInteger.MAX_VALUE
?Jika ya, maka ini panggilan kode Anda
intValue
:sumber
TL; DR
Gunakan salah satunya untuk kebutuhan konversi universal
Pemikiran
Jawabannya tergantung pada apa persyaratannya dan bagaimana Anda menjawab pertanyaan ini.
BigDecimal
berpotensi memiliki bagian fraksional yang tidak nol?BigDecimal
berpotensi tidak masuk dalamInteger
kisaran?Jika Anda menjawab tidak untuk 2 pertanyaan pertama, Anda bisa menggunakan
BigDecimal.intValueExact()
apa yang disarankan orang lain dan membiarkannya meledak ketika sesuatu yang tidak terduga terjadi.Jika Anda tidak benar-benar 100% yakin tentang pertanyaan nomor 2, maka
intValue()
adalah selalu jawaban yang salah.Membuatnya lebih baik
Mari kita gunakan asumsi berikut berdasarkan jawaban lain.
intValueExact()
dan dilakukan secara otomatisBigDecimal
lebih besar dariInteger
rentang karena hal lain akan menjadi gila kecuali Anda memiliki kebutuhan yang sangat spesifik untuk membungkus yang terjadi ketika Anda menjatuhkan bit orde tinggi.Dengan param tersebut,
intValueExact()
berikan pengecualian ketika kita tidak menginginkannya jika bagian fraksional kita tidak nol. Di sisi lain,intValue()
jangan melempar pengecualian ketika seharusnya jika kitaBigDecimal
terlalu besar.Untuk mendapatkan yang terbaik dari kedua dunia, akhiri yang
BigDecimal
pertama, lalu ubah. Ini juga bermanfaat memberi Anda kontrol lebih besar atas proses pembulatan.Tes Spock Groovy
sumber
Nah, Anda bisa menelepon
BigDecimal.intValue()
:Anda kemudian dapat secara eksplisit memanggil
Integer.valueOf(int)
atau membiarkan tinju otomatis melakukannya untuk Anda jika Anda menggunakan versi Java yang cukup baru.sumber
Mengikuti harus melakukan trik:
sumber
Sudahkah Anda mencoba memanggil BigInteger # intValue () ?
sumber
Lihat BigDecimal # intValue ()
sumber
Saya menemukan bahwa di atas tidak bekerja untuk saya. Saya menarik nilai sel dari JTable tetapi tidak bisa melakukan double atau int dll. Solusi saya:
di mana baris 0 akan selalu berupa angka. Semoga ini bisa membantu siapa pun yang masih bergulir!
sumber