Saya mencoba membaca beberapa nilai BigDecimal dari string. Katakanlah saya memiliki String ini: "1,000,000,000.999999999999999" dan saya ingin mendapatkan BigDecimal darinya. Bagaimana cara melakukannya?
Pertama-tama, saya tidak suka solusi yang menggunakan penggantian string (mengganti koma, dll.). Saya pikir harus ada beberapa pembuat format yang rapi untuk melakukan pekerjaan itu untuk saya.
Saya telah menemukan kelas DecimalFormatter, namun karena beroperasi melalui dua kali lipat - jumlah presisi yang sangat besar akan hilang.
Jadi, bagaimana caranya?
java
parsing
bigdecimal
bezmax.dll
sumber
sumber
BigDecimal
.Jawaban:
Lihat
setParseBigDecimal
di DecimalFormat. Dengan setter ini,parse
akan mengembalikan BigDecimal untuk Anda.sumber
Kode lengkap untuk membuktikan bahwa tidak ada
NumberFormatException
yang dibuang:Keluaran
sumber
1000000000.999999999999999
DecimalFormatSymbols.getInstance().getGroupingSeparator()
bukan koma, tidak perlu panik tentang berbagai lokal.Kode contoh berikut berfungsi dengan baik (lokal perlu diperoleh secara dinamis)
sumber
Kode mungkin lebih bersih, tetapi ini tampaknya melakukan trik untuk lokal yang berbeda.
sumber
Inilah cara saya melakukannya:
Jelas, jika ini menggunakan kode produksi, tidak akan sesederhana itu.
Saya tidak melihat masalah hanya dengan menghapus koma dari String.
sumber
Saya membutuhkan solusi untuk mengonversi String ke BigDecimal tanpa mengetahui lokal dan menjadi independen lokal. Saya tidak dapat menemukan solusi standar untuk masalah ini jadi saya menulis metode pembantu saya sendiri. Mungkin itu membantu orang lain juga:
Pembaruan: Peringatan! Metode pembantu ini hanya berfungsi untuk bilangan desimal, jadi bilangan yang selalu memiliki titik desimal! Jika tidak, metode helper bisa memberikan hasil yang salah untuk angka antara 1000 dan 999999 (plus / minus). Terima kasih kepada bezmax atas masukannya yang luar biasa!
Tentu saja saya sudah menguji metodenya:
sumber
7,333
mewakili? Apakah 7333 atau 7 dan 1/3 (7,333)? Di berbagai lokal, nomor itu akan diuraikan secara berbeda. Berikut bukti dari konsep: ideone.com/Ue9rT8akan menghapus semua karakter kecuali angka dan titik dari string Anda.
Untuk membuatnya sadar-lokal, Anda mungkin ingin menggunakan
getDecimalSeparator()
darijava.text.DecimalFormatSymbols
. Saya tidak tahu Java, tetapi tampilannya mungkin seperti ini:sumber
Topik lama tapi mungkin yang paling mudah adalah menggunakan Apache commons NumberUtils yang memiliki metode createBigDecimal (String value) ....
Saya kira (harap) ini memperhitungkan lokal atau itu akan menjadi agak tidak berguna.
sumber
Silakan coba ini berhasil untuk saya
sumber