Saya mendapatkan int
nilai 6 digit. Saya ingin menampilkannya sebagai String
dengan titik desimal (.) Pada 2 digit dari akhir int
. Saya ingin menggunakan float
tetapi disarankan untuk menggunakan String
untuk menampilkan tampilan yang lebih baik (bukan 1234.5
akan 1234.50
). Oleh karena itu, saya memerlukan fungsi yang akan mengambil int
parameter sebagai dan mengembalikan yang diformat String
dengan benar dengan angka desimal 2 digit dari akhir.
Mengatakan:
int j= 123456
Integer.toString(j);
//processing...
//output : 1234.56
String str = Integer.toString(j); //integer or string with white spaces<br/> str = new StringBuffer(str.trim()).insert(str.length()-2, ".").toString();
Jawaban:
sumber
x = x.substring(0, x.length()-2) + "." + x.substring(x.length()-2);
Seperti disebutkan dalam komentar, StringBuilder mungkin merupakan implementasi yang lebih cepat daripada menggunakan StringBuffer . Seperti yang disebutkan dalam dokumen Java:
Penggunaan:
Atau jika Anda perlu sinkronisasi gunakan StringBuffer dengan penggunaan serupa:
sumber
java.lang.StringIndexOutOfBoundsException
(mencoba mengakses referensi yang tidak ada).sumber
java.math.BigDecimal
karena menggunakandouble
dapat menyebabkan kesalahan pembulatan . Jika kecepatan lebih berharga daripada presisidouble
lebih baik.Dalam kebanyakan kasus penggunaan, menggunakan
StringBuilder
(seperti yang sudah dijawab) adalah cara yang baik untuk melakukan ini. Namun, jika kinerja penting, ini bisa menjadi alternatif yang baik.sumber
Menggunakan ApacheCommons3 StringUtils, Anda juga bisa melakukannya
pada dasarnya meringkas penggabungan tetapi lebih pendek jika Anda tidak keberatan menggunakan perpustakaan, atau sudah bergantung pada StringUtils
sumber
Anda bisa menggunakannya
Sesuai komentar, 12345 / 100.0 akan lebih baik, seperti penggunaan double bukan float.
sumber
double
mungkin pilihan yang lebih baik. float hanya akurat hingga 6 digit.Jika Anda menggunakan sistem di mana float mahal (misalnya tidak ada FPU) atau tidak diizinkan (misalnya dalam akuntansi) Anda bisa menggunakan sesuatu seperti ini:
Kalau tidak, DecimalFormat adalah solusi yang lebih baik. (varian StringBuilder di atas tidak akan berfungsi dengan angka kecil (<100)
sumber
Saya pikir solusi yang lebih sederhana dan lebih elegan untuk menyisipkan sebuah String dalam posisi tertentu adalah one-liner ini:
Misalnya, untuk memasukkan yang hilang
:
ke dalam String waktu:Apa yang dilakukannya adalah, mencocokkan
position
karakter dari awal string, mengelompokkan itu, dan mengganti grup dengan dirinya sendiri ($1
) diikuti olehinsert
string. Pikirkan replall, meskipun selalu ada satu kejadian, karena parameter pertama harus berupa regex.Tentu saja itu tidak memiliki kinerja yang sama dengan solusi StringBuilder, tapi saya percaya kesederhanaan dan keanggunan sebagai sederhana dan lebih mudah dibaca satu-liner (dibandingkan dengan metode besar) sudah cukup untuk menjadikannya solusi pilihan di sebagian besar non kinerja kasus penggunaan-kritis.
Catatan Saya sedang memecahkan masalah umum dalam judul untuk alasan dokumentasi, tentu saja jika Anda berurusan dengan angka desimal Anda harus menggunakan solusi spesifik domain yang sudah diusulkan.
sumber
String.format ("% 0d.% 02d", d / 100, d% 100);
sumber
Untuk Kotlin dudes;) dari jawaban yang diterima (@ MikeThomsen's)
Tes ✅
sumber
sumber
sumber
Coba ini :
sumber