Pemformatan desimal ganda di Jawa


118

Saya mengalami beberapa masalah saat memformat desimal ganda. Jika saya memiliki nilai ganda, misalnya 4.0, bagaimana cara memformat desimal sehingga menjadi 4,00?




Jawaban:


218

Salah satunya adalah dengan menggunakan NumberFormat .

NumberFormat formatter = new DecimalFormat("#0.00");     
System.out.println(formatter.format(4.0));

Keluaran:

4.00


1
Ya, tapi saya tidak ingin koma, saya ingin tanda desimal.
Christoffer

Saya mendapatkan koma. Inilah yang saya lakukan. "variabel ganda; NumberFormat formatter = new DecimalFormat (" # 0.00 "); System.out.println (formatter.format (variabel));
Christoffer

keluaran untuk itu adalah X, 00 dan bukan X.00
Christoffer

9
Anda mendapatkan koma karena bahasa default yang digunakan oleh JVM Anda, yang mungkin berbeda dari bahasa Nambari. Silahkan lihat di NumberFormat javadoc: docs.oracle.com/javase/1.4.2/docs/api/java/text/…
Michael Zilbermann

1
Seperti yang ditunjukkan oleh zim2001, lokal Anda mungkin berbeda. Baca link yang disediakan di jawaban saya. Pada akhirnya Anda akan menemukan info tentang ini.
kosa

73

Dengan Java 8, Anda dapat menggunakan formatmetode ..: -

System.out.format("%.2f", 4.0); // OR

System.out.printf("%.2f", 4.0); 
  • fdigunakan untuk floatingnilai poin ..
  • 2 setelah desimal menunjukkan, jumlah tempat desimal setelahnya .

Untuk sebagian besar versi Java, Anda dapat menggunakan DecimalFormat: -

    DecimalFormat formatter = new DecimalFormat("#0.00");
    double d = 4.0;
    System.out.println(formatter.format(d));

43

Gunakan String.format :

String.format("%.2f", 4.52135);

Sesuai dokumen:

Lokal yang selalu digunakan adalah yang dikembalikan oleh Locale.getDefault().


8
String.format juga menerima lokal sebagai parameter pertama yang memperhitungkan pemformatan tanda desimal.
Vincent Mimoun-Prat

4
Untuk menghindari tanda desimal khusus lokal (seperti koma), tentukan lokal AS: String.format (Locale.US, "%. 2f", 4.52135);
Alexander233

3
Saya akan mengatakan "untuk menggunakan titik khusus lokal AS sebagai tanda desimal, sebutkan lokal AS" .. gagasan bahwa kebiasaan AS adalah yang benar dan segala sesuatu yang lain adalah semacam hal "rakyat" membuat saya gila.
Simone Gianni

@SimoneGianni Jangan membuat asumsi yang bodoh, beberapa orang mungkin membutuhkan desimal menjadi titik. Misalnya saya menulis fungsi yang mengekspor dokumen CSV, dan saya tidak dapat menggunakan koma karena karakter koma adalah pembatas.
Kaiser Keister

19

Menggunakan String.format, Anda dapat melakukan ini:

double price = 52000;
String.format("$%,.2f", price);

Perhatikan koma yang membuatnya berbeda dari jawaban @ Vincent

Keluaran:

$52,000.00

Sumber yang bagus untuk memformat adalah halaman java resmi tentang masalah ini


6

Anda selalu bisa menggunakan metode statis printf from System.out- Anda kemudian akan mengimplementasikan formatter yang sesuai; ini menghemat ruang heap di mana contoh lain harus Anda lakukan.

Ex:

System.out.format("%.4f %n", 4.0); 

System.out.printf("%.2f %n", 4.0); 

Menghemat ruang tumpukan yang merupakan bonus yang cukup besar, namun saya berpendapat bahwa contoh ini jauh lebih mudah dikelola daripada jawaban lainnya, terutama karena sebagian besar pemrogram mengetahui fungsi printf dari C (Java mengubah sedikit fungsi / metode).


1
@Baz Apakah saya melewatkan detail penting di sini, tidak ada printStream yang disebutkan. OP meminta bantuan pemformatan (yang dapat diselesaikan dengan lebih mudah dengan melihat dokumen Java) ke aliran keluaran standar. Menjelaskan.
Lewis Robbins

Salahku. Sedang melihat versi javadoc yang salah (1.4). BTW: outadalah PrintStream.
Baz

@Baz Jangan khawatir. Ya, saya berasumsi bahwa itulah kelas yang Anda maksud, di semua buku saya printf disebut sebagai metode statis dari System.out (karena metode tersebut statis).
Lewis Robbins

1
Tepatnya, printfadalah metode statis PrintStream. Lihat di sini ;) Tapi tetap saja +1.
Baz

@Baz Dari dokumen kelas printStream mewarisi System.out. Saya mungkin salah - meskipun cukup aneh mewarisi metode statis (apakah mungkin)? Anda, saya berharap benar.
Lewis Robbins

4
double d = 4.0;
DecimalFormat nf = DecimalFormat.getInstance(Locale.ENGLISH);
System.out.println(nf.format("#.##"));


1

Metode alternatif adalah menggunakan setMinimumFractionDigitsmetode dari NumberFormatkelas.

Di sini Anda pada dasarnya menentukan berapa banyak angka yang ingin Anda munculkan setelah koma desimal.

Jadi masukan 4.0akan menghasilkan 4.00, dengan asumsi jumlah yang Anda tentukan adalah 2.

Tetapi, jika Doublemasukan Anda berisi lebih dari jumlah yang ditentukan, maka akan mengambil jumlah minimum yang ditentukan, lalu tambahkan satu digit lagi dibulatkan ke atas / bawah

Misalnya, 4.15465454dengan jumlah minimal 2 yang ditentukan akan menghasilkan4.155

NumberFormat nf = NumberFormat.getInstance();
nf.setMinimumFractionDigits(2);
Double myVal = 4.15465454;
System.out.println(nf.format(myVal));

Cobalah secara online


1

Ada banyak cara untuk melakukan ini. Itu diberikan di bawah ini:

Misalkan nomor asli Anda diberikan di bawah ini:

 double number = 2354548.235;

Menggunakan NumberFormat:

NumberFormat formatter = new DecimalFormat("#0.00");
    System.out.println(formatter.format(number));

Menggunakan String.format:

System.out.println(String.format("%,.2f", number));

Menggunakan DecimalFormat dan pola:

NumberFormat nf = DecimalFormat.getInstance(Locale.ENGLISH);
        DecimalFormat decimalFormatter = (DecimalFormat) nf;
        decimalFormatter.applyPattern("#,###,###.##");
        String fString = decimalFormatter.format(number);
        System.out.println(fString);

Menggunakan DecimalFormat dan pola

DecimalFormat decimalFormat = new DecimalFormat("############.##");
        BigDecimal formattedOutput = new BigDecimal(decimalFormat.format(number));
        System.out.println(formattedOutput);

Dalam semua kasus, outputnya adalah: 2354548.23

Catatan :

Selama pembulatan, Anda dapat menambahkan RoundingModeformatter Anda. Berikut adalah beberapa mode pembulatan yang diberikan di bawah ini:

    decimalFormat.setRoundingMode(RoundingMode.CEILING);
    decimalFormat.setRoundingMode(RoundingMode.FLOOR);
    decimalFormat.setRoundingMode(RoundingMode.HALF_DOWN);
    decimalFormat.setRoundingMode(RoundingMode.HALF_UP);
    decimalFormat.setRoundingMode(RoundingMode.UP);

Berikut impornya :

import java.math.BigDecimal;
import java.math.RoundingMode;
import java.text.DecimalFormat;
import java.text.NumberFormat;
import java.util.Locale;

1

Anda dapat menggunakan salah satu metode di bawah ini

  1. Jika Anda menggunakan java.text.DecimalFormat

    DecimalFormat decimalFormat = NumberFormat.getCurrencyInstance(); 
    decimalFormat.setMinimumFractionDigits(2); 
    System.out.println(decimalFormat.format(4.0));

    ATAU

    DecimalFormat decimalFormat =  new DecimalFormat("#0.00"); 
    System.out.println(decimalFormat.format(4.0)); 
  2. Jika Anda ingin mengubahnya menjadi format string sederhana

    System.out.println(String.format("%.2f", 4.0)); 

Semua kode di atas akan mencetak 4,00


0

Bekerja 100%.

import java.text.DecimalFormat;

public class Formatting {

    public static void main(String[] args) {
        double value = 22.2323242434342;
        // or  value = Math.round(value*100) / 100.0;

        System.out.println("this is before formatting: "+value);
        DecimalFormat df = new DecimalFormat("####0.00");

        System.out.println("Value: " + df.format(value));
    }

}

-3

Impor pertama NumberFormat. Kemudian tambahkan ini:

NumberFormat currencyFormatter = NumberFormat.getCurrencyInstance();

Ini akan memberi Anda dua tempat desimal dan memberi tanda dolar jika berhubungan dengan mata uang.

import java.text.NumberFormat;
public class Payroll 
{
    /**
     * @param args the command line arguments
     */
    public static void main(String[] args) 
    {
    int hoursWorked = 80;
    double hourlyPay = 15.52;

    double grossPay = hoursWorked * hourlyPay;
    NumberFormat currencyFormatter = NumberFormat.getCurrencyInstance();

    System.out.println("Your gross pay is " + currencyFormatter.format(grossPay));
    }

}

1
Pertanyaannya bukan tentang menampilkan mata uang dan lebih akurat dijawab dengan menggunakan fungsi format) seperti yang dijelaskan dalam jawaban lain).
yacc

-4

Anda dapat melakukannya sebagai berikut:

double d = 4.0;
DecimalFormat df = new DecimalFormat("#.##");
System.out.print(df.format(d));

1
Tidak berfungsi karena menggunakan ##alih-alih00
Joaquin Iurchuk

-4

Saya tahu bahwa ini adalah topik lama, tetapi Jika Anda benar-benar ingin memiliki titik dan bukan koma, simpan saja hasil Anda sebagai X, 00 ke dalam String dan kemudian cukup ubah untuk jangka waktu sehingga Anda mendapatkan X.00

Cara termudah adalah dengan menggunakan replace.

String var = "X,00";
String newVar = var.replace(",",".");

Outputnya adalah X.00 yang Anda inginkan. Juga untuk membuatnya mudah Anda bisa melakukan semuanya sekaligus dan menyimpannya menjadi variabel ganda:

Double var = Double.parseDouble(("X,00").replace(",",".");

Saya tahu bahwa balasan ini tidak berguna sekarang tetapi mungkin seseorang yang memeriksa forum ini akan mencari solusi cepat seperti ini.

Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.