Ubah Ganda menjadi String, Menghapus Tempat Desimal

1. Perkenalan

Dalam tutorial ini, kita akan melihat berbagai cara untuk mengubah nilai ganda menjadi String , menghapus tempat desimalnya.

Kita akan melihat bagaimana melakukannya ketika kita hanya ingin memotong bagian desimalnya dan ketika kita ingin membulatkannya.

2. Pemotongan Menggunakan Casting

Jika nilai ganda kita berada dalam kisaran int , kita bisa memasukkannya ke int . Pemeran memotong bagian desimal, yang berarti memotongnya tanpa melakukan pembulatan apa pun.

Pendekatan ini sekitar 10 kali lebih cepat dari pendekatan lain yang akan kita lihat.

Setelah itu int, maka kita dapat meneruskannya ke metode valueOf di kelas String :

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

Kami yakin dapat menggunakan pendekatan ini ketika kami dijamin bahwa nilai ganda berada dalam kisaran int . Tetapi jika nilai kami melebihi itu, casting tidak akan berfungsi seperti yang kami inginkan .

3. Pembulatan Menggunakan String.format ()

Sekarang, pendekatan yang tersisa tidak sebatas casting, tetapi mereka memiliki nuansa tersendiri.

Misalnya, pendekatan lain adalah menggunakan metode format kelas String . Parameter pertama dari metode ini menentukan bahwa kita memformat nilai titik mengambang dengan angka nol setelah titik desimal:

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

The Format Metode menggunakan HALF_UP pembulatan yang akan mengumpulkan jika nilai setelah bagian pecahan adalah 0,5 atau di atas. Jika tidak, ini mengembalikan angka sebelum koma desimal.

Dan meskipun sederhana, String.format adalah cara paling lambat untuk melakukan ini .

4. Menggunakan NumberFormat.format ()

Kelas NumberFormat juga menyediakan metode format yang mirip dengan kelas String , tetapi NumberFormat lebih cepat dan dengan itu, kita dapat menentukan mode pembulatan untuk mencapai pemotongan atau pembulatan.

Metode setMaximumFractionDigits () memberi tahu pemformat berapa banyak digit pecahan setelah titik desimal yang akan disertakan dalam keluaran:

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

Anehnya, NumberFormat tidak menggunakan HALF_UP secara default. Sebaliknya, ia menggunakan pembulatan HALF_EVEN secara default, yang berarti ia akan membulatkan seperti biasa kecuali pada 0,5, dalam hal ini ia akan memilih bilangan genap terdekat .

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

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

Dan, kita dapat mengubah ini dan mencapai pemotongan dengan mengatur pemformat untuk menggunakan mode pembulatan FLOOR sebagai gantinya:

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

Dan sekarang, itu akan terpotong, bukan bulat.

5. Menggunakan DecimalFormat.format ()

Mirip dengan NumberFormat , kelas DecimalFormat dapat digunakan untuk memformat nilai ganda . Namun, alih-alih menyetel format keluaran dengan pemanggilan metode, kita dapat memberi tahu pemformat keluaran apa yang kita inginkan dengan memberikan pola tertentu kepada konstruktor:

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

Pola “#, ###” menandakan bahwa kita ingin pemformat hanya mengembalikan bagian integer dari input. Ini juga menandakan bahwa kita ingin digit dikelompokkan dalam tiga yang dipisahkan oleh koma.

Default pembulatan yang sama berlaku di sini jadi jika kita ingin menampilkan nilai terpotong, kita dapat mengatur mode pembulatan ke FLOOR :

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

6. Menggunakan BigDecimal.toString ()

Pendekatan terakhir kita akan melihat adalah BigDecimal , yang kami akan termasuk karena itu dari kemampuan NumberFormat dan DecimalFormat untuk lebih besar ganda s .

Kita dapat menggunakan BigDecimal 's setScale metode untuk mengatakan apakah kita ingin putaran atau truncate:

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

Ingatlah bahwa BigDecimal tidak dapat diubah jadi, seperti String, kita perlu menyetel ulang nilainya.

Dan, kemudian, kita sebut saja BigDecimal 's toString :

String rounded = big.toString();

7. Kesimpulan

Dalam tutorial ini, kami melihat berbagai cara di mana kami dapat mengonversi ganda menjadi String sambil menghapus tempat desimal. Kami menyediakan pendekatan yang akan menghasilkan nilai yang dibulatkan atau dipotong.

Seperti biasa, sampel dan tolok ukur tersedia di GitHub.