Cara Membundarkan Nombor hingga N Tempat Perpuluhan di Jawa

1. Gambaran keseluruhan

Dalam artikel pendek ini, kita akan melihat bagaimana membundarkan nombor hingga n perpuluhan di Jawa.

2. Nombor Perpuluhan di Jawa

Java menyediakan dua jenis primitif yang dapat digunakan untuk menyimpan nombor perpuluhan: float dan double . Double adalah jenis yang digunakan secara lalai:

double PI = 3.1415;

Walau bagaimanapun, kedua-dua jenis ini tidak boleh digunakan untuk nilai yang tepat , seperti mata wang. Untuk itu, dan juga untuk pembundaran, kita boleh menggunakan kelas BigDecimal .

3. Memformat Nombor Perpuluhan

Sekiranya kita hanya ingin mencetak nombor perpuluhan dengan n digit selepas titik perpuluhan, kita hanya dapat memformat String output:

System.out.printf("Value with 3 digits after decimal point %.3f %n", PI); // OUTPUTS: Value with 3 digits after decimal point 3.142

Sebagai alternatif, kita dapat memformat nilai dengan kelas DecimalFormat :

DecimalFormat df = new DecimalFormat("###.###"); System.out.println(df.format(PI));

DecimalFormat membolehkan kita menetapkan tingkah laku pembulatan secara eksplisit, memberikan lebih banyak kawalan output daripada String.format () yang digunakan di atas.

4. Pembundaran Berganda dengan BigDecimal

Untuk membundarkan dua s hingga n perpuluhan, kita boleh menulis kaedah penolong :

private static double round(double value, int places) { if (places < 0) throw new IllegalArgumentException(); BigDecimal bd = new BigDecimal(Double.toString(value)); bd = bd.setScale(places, RoundingMode.HALF_UP); return bd.doubleValue(); }

Terdapat satu perkara penting yang perlu diperhatikan dalam penyelesaian ini - semasa membina BigDecimal ; kita mesti sentiasa menggunakan BigDecimal (String) pembina . Ini menghalang masalah dengan mewakili nilai yang tidak tepat.

Kita boleh mencapainya dengan menggunakan perpustakaan Apache Commons Math:

 org.apache.commons commons-math3 3.5 

Versi terbaru boleh didapati di sini.

Setelah perpustakaan ditambahkan ke projek, kita dapat menggunakan kaedah Precision.round () , yang mengambil dua argumen - nilai dan skala:

Precision.round(PI, 3);

Secara lalai, ia menggunakan kaedah pembulatan HALF_UP yang sama dengan kaedah pembantu kami. Oleh itu, hasilnya harus sama.

Perhatikan bahawa kita dapat mengubah tingkah laku pembundaran dengan meneruskan kaedah pembulatan yang diinginkan sebagai parameter ketiga.

5. Pembundaran Berganda Dengan DoubleRounder

DoubleRounder adalah utiliti di perpustakaan desimal4j. Ia menyediakan kaedah cepat dan bebas sampah untuk membundarkan dua dari 0 hingga 18 titik perpuluhan.

Kita boleh mendapatkan perpustakaan (versi terbaru boleh didapati di sini) dengan menambahkan kebergantungan ke pom.xml :

 org.decimal4j decimal4j 1.0.3 

Sekarang, kita boleh menggunakan:

DoubleRounder.round(PI, 3);

Walau bagaimanapun, DoubleRounder gagal dalam beberapa senario, contohnya:

System.out.println(DoubleRounder.round(256.025d, 2)); // OUTPUTS: 256.02 instead of expected 256.03

6. Kaedah Math.round ()

Kaedah membundarkan nombor lain adalah dengan menggunakan Kaedah Math.Round ().

Dalam kes ini, kita boleh mengawal n bilangan tempat perpuluhan dengan mendarab dan membahagi dengan 10 ^ n :

public static double roundAvoid(double value, int places) { double scale = Math.pow(10, places); return Math.round(value * scale) / scale; }

Kaedah ini tidak digalakkan kerana mengurangkan nilainya . Dalam banyak kes, nilai dibundarkan dengan tidak betul:

System.out.println(roundAvoid(1000.0d, 17)); // OUTPUTS: 92.23372036854776 !! System.out.println(roundAvoid(260.775d, 2)); // OUTPUTS: 260.77 instead of expected 260.78

Oleh itu, kaedah ini disenaraikan di sini untuk tujuan pembelajaran sahaja.

7. Kesimpulannya

Dalam tutorial ringkas ini, kami membahas teknik yang berbeza untuk membundarkan nombor hingga n perpuluhan.

Kita hanya dapat memformat output tanpa mengubah nilainya, atau kita dapat membundarkan pemboleh ubah dengan menggunakan kaedah pembantu. Kami juga telah membahas beberapa perpustakaan yang menangani masalah ini.

Kod yang digunakan semasa perbincangan boleh didapati di GitHub.