JavaRush /Java Blog /Random-ID /Pembulatan angka di Jawa

Pembulatan angka di Jawa

Dipublikasikan di grup Random-ID
Angka floating point (float, double) digunakan saat menghitung ekspresi yang memerlukan presisi desimal. Akurasi yang tinggi seringkali dibutuhkan dalam akuntansi dan operasi komputasi lainnya. Pembulatan angka di Jawa - 1Tapi apakah kita selalu membutuhkan “ekor” angka yang panjang setelah koma desimal? Mungkin akurasi tiga bagian nyata sudah cukup bagi kita? Dan kami puas dengan opsi ini, bagaimana cara melakukan pembulatan dengan benar? Inilah yang akan kita bicarakan hari ini: kita akan melihat cara membulatkan angka di Java .

format string

Sebagai metode pertama, kita akan melihat pembulatan ganda:
double value = 34.766674;
String result = String.format("%.3f",value);
System.out.print(result);//  34,767
Hasilnya, kami akan memformat angka floating point kami 34766674 dengan presisi 3 tempat desimal , karena dalam instruksi pemformatan kami menentukan tiga tempat desimal "%.3f. Pada gilirannya, %f saat memformat string menunjukkan jenis floating point angka, yang mencakup tipe data double dan float di Java. Pada contoh di atas, kita menampilkan nilai yang dihasilkan ke konsol. Sekarang pertanyaannya adalah: bagaimana kita mempersingkatnya? Sederhana saja: Anda perlu menggunakan printf, yang pada gilirannya adalah format + print, sehingga contoh kita sebelumnya akan direduksi menjadi:
double value = 34.766674;
System.out.printf("%.3f",value);
Selain metode ini , turunan kelas PrintStream juga memiliki metode format, yang cara kerjanya serupa:
double value = 34.766674;
System.out.format("%.3f",value);
Pembulatan terjadi dalam mode HALF_UP - menuju angka yang lebih dekat dengan angka yang terpotong (ke 0 atau 10). Jika angka-angka ini berjarak sama (dalam kasus 5), maka dilakukan pembulatan ke atas. Contoh:
String firstResult = String.format("%.3f",7.0004);// 7,000
String secondResult = String.format("%.3f",7.0005);// 7,001
String thirdResult = String.format("%.3f",7.0006);// 7,001
Kami akan membahas mode pembulatan lebih detail di bawah. Pembulatan angka di Jawa - 2

Format Desimal

Pilihan lainnya adalah dengan menggunakan kelas DecimalFormat . Ini dirancang untuk memformat angka apa pun di Java, baik bilangan bulat atau angka floating point. Saat kita membuat instance DecimalFormat, kita bisa meneruskannya ke string format. Ini akan menunjukkan berapa banyak tempat desimal yang akan diformat untuk input. Seperti inilah contoh kita menggunakan DecimalFormat :
double value = 34.766674;
DecimalFormat decimalFormat = new DecimalFormat( "#.###" );
String result = decimalFormat.format(value);
System.out.print(result);//34,767
Baris #.### adalah pola yang menunjukkan bahwa kita memformat nilai yang diteruskan ke 3 tempat desimal. Untuk mengubah pola setelah objek DecimalFormat dibuat, Anda dapat menggunakan metode applyPattern dan applyLocalizedPattern :
DecimalFormat decimalFormat = new DecimalFormat("#.###");
decimalFormat.applyPattern("#.#");
decimalFormat.applyLocalizedPattern("#.#####");
Tapi hari ini kita berbicara tentang pembulatan, bukan? Saat memotong angka dengan angka desimal di luar pola yang ditentukan, DecimalFormat membulatkan angka tersebut ke atas jika angka terakhir yang terpotong lebih besar dari 5. Namun bagaimana jika angka tersebut adalah 5? Ternyata letaknya tepat di tengah-tengah antara bilangan bulat terdekat. Lalu bagaimana? Dalam hal ini, nomor sebelumnya diperhitungkan. Jika genap maka dilakukan pembulatan:
DecimalFormat decimalFormat = new DecimalFormat("#.###");
String result = decimalFormat.format(7.4565);
System.out.println((result));// 7,457
Jika ganjil, tidak dilakukan:
DecimalFormat decimalFormat = new DecimalFormat("#.###");
String result = decimalFormat.format(7.4575);
System.out.println((result));// 7,457
Ada sedikit perbedaan antara memformat angka floating point menggunakan String.format() dan DecimalFormat.format(). Yang pertama akan selalu mencetak angka nol di belakangnya meskipun tidak ada bagian pecahan. Misalnya:
String firstResult = String.format("%.3f", 7.000132);
System.out.println((firstResult)); // 7.000

DecimalFormat decimalFormat = new DecimalFormat("#.###");
String secondResult = decimalFormat.format(7.000132);
System.out.println((secondResult));  // 7
Seperti yang bisa kita lihat, ketika memformat angka 7.000132 menjadi tiga desimal, metode format() pada String akan menghasilkan 7.000, sedangkan metode format() pada DecimalFormat akan menghasilkan 7. Artinya, Anda dapat memilih String.format() atau DecimalFormat.format( ) tergantung pada apakah Anda memerlukan angka nol di belakangnya atau tidak. Dengan menggunakan metode yang dijelaskan di atas, kami mendapatkan hasil berupa string. Mari kita lihat cara untuk mendapatkan kembali nilai numerik dengan tepat.

Matematika

Mustahil untuk tidak menyebutkan kelas khusus yang dirancang untuk berbagai operasi aritmatika dengan angka - Matematika . Pembulatan angka di Jawa - 3Kelas ini juga memiliki metode pembulatan, tetapi tidak seperti yang telah dijelaskan, metode ini tidak mengizinkan Anda menyetel sejumlah tempat desimal tertentu, melainkan membulatkannya ke bilangan bulat:
  • Math.ceil() membulatkan ke atas ke bilangan bulat terdekat, namun tidak mengembalikan tipe bilangan bulat, melainkan ganda:

    double value = 34.777774;
    double result = Math.ceil(value);
    System.out.println((result)); //35.0

    Kalaupun kita punya 34.0000000, setelah menggunakan Math.ceil kita tetap mendapat 35.0.

    Math.floor() membulatkan ke bawah ke bilangan bulat terdekat, juga mengembalikan hasilnya sebagai ganda:

    double value = 34.777774;
    double result = Math.floor(value);
    System.out.println((result)); //34.0

    Sekali lagi, meskipun kita memiliki nilai 34.999999999, maka setelah menggunakan Math.floor kita akan mendapatkan 34.0.

  • Math.round() - membulatkan ke bilangan bulat terdekat, memberikan hasil int:

    double value = 34.777774;
    int result = Math.round(value);
    System.out.println((result)); //35

    Jika angka kita 34,5 maka dibulatkan menjadi 35, namun jika kurang dari 34,499 maka angka tersebut dipotong menjadi 34.

    Agar tidak sekadar memotong seluruh bagian nyata, tetapi untuk mengatur proses ini ke sejumlah tempat desimal tertentu dan sekaligus membulatkannya, bilangan tersebut dikalikan dengan 10^n (10 pangkat n), di mana n sama dengan jumlah tempat desimal yang diperlukan. Setelah ini, mereka menggunakan beberapa metode kelas Matematika untuk membulatkan, lalu membaginya lagi dengan 10^n:

    double value = 34.777774;
    double scale = Math.pow(10, 3);
    double result = Math.ceil(value * scale) / scale;
    System.out.println((result)); //34.778

    Math.pow - membutuhkan dua argumen. Yang pertama adalah angkanya, yang kedua adalah pangkat yang perlu dinaikkan.

Pembulatan dengan BigDecimal

BigDecimal adalah kelas yang memungkinkan Anda bekerja dengan bilangan floating point. Secara khusus, fitur utamanya adalah ia dapat menyimpan bilangan pecahan dengan panjang yang berubah-ubah (yaitu, tidak ada batasan rentang bilangan tersebut). Selain itu, kelas ini menyimpan berbagai metode pemrosesan aritmatika, termasuk pembulatan. Kelas objek ini dapat dibuat dengan mengatur konstruktor menjadi double, string untuk menampilkan bilangan floating point, double dan MathContext , dan seterusnya. MathContext adalah kombinasi RoundingMode dan angka yang menggambarkan jumlah total digit dalam nilai yang dicari. Aturan pembulatan RoundingMode: BAWAH - pembulatan menuju nol. ATAS —pembulatan dari mode nol. CEILING - pembulatan menuju tak terhingga positif. LANTAI - pembulatan menuju tak terhingga negatif. HALF_UP - Pembulatan ke "tetangga terdekat" jika kedua tetangga tidak berjarak sama (yaitu, bila angka yang dibulatkan adalah 5). Dalam hal ini, pembulatan ke atas dilakukan. HALF_DOWN - membulatkan menuju "tetangga terdekat". Jika jarak kedua tetangga tidak sama, maka bulatkan ke bawah. HALF_EVEN - Dibulatkan ke "tetangga terdekat" jika jarak kedua tetangga tidak sama. Dalam hal ini, bulatkan ke tetangga genap (seperti dalam DecimalFormat yang dijelaskan di atas). TIDAK PERLU - Digunakan untuk mengonfirmasi bahwa operasi yang diminta memiliki hasil yang benar. Oleh karena itu, pembulatan tidak diperlukan. Contoh:
MathContext context = new MathContext(5, RoundingMode.HALF_UP);
double value = 34.777554;
BigDecimal result = new BigDecimal(value, context);
System.out.println(result); //34.778
Selain kemampuan untuk menetapkan aturan pembulatan di konstruktor, BigDecimal memungkinkan Anda menyetel mode pembulatan setelah instance dibuat. Untuk melakukan ini, gunakan metode setScale , di mana Anda perlu mengatur jumlah tempat desimal dan aturan pembulatan:
double value = 34.777554;
BigDecimal result = new BigDecimal(value);
result = result.setScale(3, RoundingMode.DOWN);
System.out.println(result); //34.777
BigDecimal juga memiliki variabel int internal yang dirancang untuk menyetel mode pembulatan ( ROUND_DOWN , ROUND_CEILING , ROUND_FLOOR ...) Ini adalah aturan pembulatan yang mirip dengan yang disajikan di kelas RoundingMode dan juga digunakan di setScale :
BigDecimal result = new BigDecimal(value);
result = result.setScale(3, BigDecimal.ROUND_DOWN);
Baca selengkapnya tentang kelas BigDecimal di artikel ini .
Komentar
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION