Tukar Double ke String, Mengeluarkan Tempat Perpuluhan

1. Pengenalan

Dalam tutorial ini, kita akan melihat pelbagai cara untuk menukar nilai berganda menjadi String , menghilangkan tempat perpuluhannya.

Kita akan melihat bagaimana melakukannya ketika kita mahu memotong bahagian perpuluhan dan ketika kita mahu membulatkannya.

2. Pemotongan Menggunakan Casting

Sekiranya nilai berganda kita berada dalam julat int , kita boleh memasukkannya ke int . Pemeran memotong bahagian perpuluhan, yang bermaksud memotongnya tanpa melakukan pembundaran.

Pendekatan ini kira-kira 10 kali lebih cepat daripada pendekatan lain yang akan kita lihat.

Setelah menjadi int, maka kita kemudian boleh meneruskannya ke kaedah valueOf pada kelas String :

String truncated = String.valueOf((int) doubleValue);

Kami boleh menggunakan pendekatan ini dengan yakin apabila kami dijamin bahawa nilai ganda berada dalam lingkungan int . Tetapi jika nilai kita melebihi itu, casting tidak akan berfungsi seperti yang kita mahukan .

3. Pembundaran Menggunakan String.format ()

Sekarang, pendekatan yang selebihnya tidak sebatas pemeran, tetapi mereka mempunyai nuansa tersendiri.

Sebagai contoh, pendekatan lain adalah menggunakan kaedah format kelas String . Parameter pertama kaedah menentukan bahawa kita memformat nilai titik terapung dengan sifar digit setelah titik perpuluhan:

String rounded = String.format("%.0f", doubleValue);

The format kaedah menggunakan HALF_UP pembundaran yang akan pusingan sehingga jika nilai selepas bahagian pecahan adalah 0,5 atau ke atas. Jika tidak, ia mengembalikan nombor sebelum titik perpuluhan.

Dan walaupun ringkas, String.format adalah kaedah paling lambat untuk melakukan ini .

4. Menggunakan NumberFormat.format ()

The NumberFormat kelas juga menyediakan format kaedah sama dengan String kelas, tetapi NumberFormat adalah lebih cepat dan dengan itu, kita boleh menentukan mod pembundaran untuk mencapai memuat pemangkasan atau angka.

Kaedah setMaximumFactionsDigits () memberitahu pemformat berapa digit pecahan selepas titik perpuluhan untuk dimasukkan dalam output

NumberFormat nf = NumberFormat.getNumberInstance(); nf.setMaximumFractionDigits(0); String rounded = nf.format(doubleValue);

Anehnya, NumberFormat tidak menggunakan HALF_UP secara lalai. Sebaliknya, ia menggunakan pembundaran HALF_EVEN secara lalai, yang bermaksud ia akan membulatkan seperti biasa kecuali pada .5, dalam hal ini ia akan memilih nombor genap terdekat .

Walaupun HALF_EVEN membantu dengan analisis statistik, mari gunakan HALF_UP agar konsisten:

nf.setRoundingMode(RoundingMode.HALF_UP); String rounded = nf.format(doubleValue);

Dan, kita boleh mengubahnya dan mencapai pemotongan dengan menetapkan pemformat untuk menggunakan mod pembulatan FLOOR sebagai gantinya:

nf.setRoundingMode(RoundingMode.FLOOR); String truncated = nf.format(doubleValue)

Dan sekarang, ia akan terpotong dan bukannya bulat.

5. Menggunakan DecimalFormat.format ()

Sama dengan NumberFormat , kelas DecimalFormat dapat digunakan untuk memformat nilai ganda . Namun, alih-alih menetapkan format output dengan kaedah panggilan, kita dapat memberitahu formatter output apa yang kita mahukan dengan memberikan konstruktor dengan corak tertentu:

DecimalFormat df = new DecimalFormat("#,###"); df.setRoundingMode(RoundingMode.HALF_UP); String rounded = df.format(doubleValue);

Pola “#, ###” menandakan bahawa kita ingin pemformat hanya mengembalikan bahagian integer dari input. Ini juga menunjukkan bahawa kita mahu digit dikelompokkan dalam tiga yang dipisahkan dengan koma.

Piawai pembundaran yang sama berlaku di sini jadi jika kita ingin mengeluarkan nilai terpotong, kita dapat menetapkan mod pembundaran ke Lantai :

df.setRoundingMode(RoundingMode.FLOOR); String truncated = df.format(doubleValue)

6. Menggunakan BigDecimal.toString ()

Pendekatan terakhir yang akan kita perhatikan adalah BigDecimal , yang akan kita sertakan kerana ia mengungguli NumberFormat dan DecimalFormat untuk double s yang lebih besar .

Kita boleh menggunakan BigDecimal 's setScale kaedah untuk memberitahu sama ada kita mahu bulat atau truncate:

double largeDouble = 345_345_345_345.56; BigDecimal big = new BigDecimal(largeDouble); big = big.setScale(0, RoundingMode.HALF_UP);

Ingat bahawa BigDecimal s tidak berubah jadi, seperti Strings, kita perlu menetapkan semula nilainya.

Dan, kita hanya memanggil BigDecimal 's toString :

String rounded = big.toString();

7. Kesimpulannya

Dalam tutorial ini, kita melihat cara yang berbeza di mana kita dapat menukar dua menjadi String sambil membuang tempat perpuluhan. Kami menyediakan pendekatan yang akan menghasilkan nilai bulat atau terpotong.

Seperti biasa, sampel dan tanda aras boleh didapati di GitHub.