Pemformatan desimal ganda di Jawa

Jawaban:

218

Salah satunya adalah dengan menggunakan NumberFormat .

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

Keluaran:

4.00

kosa
sumber
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));
Rohit Jain
sumber
43

Gunakan String.format :

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

Sesuai dokumen:

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

Vincent Mimoun-Prat
sumber
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

Ojonugwa Jude Ochalifu
sumber
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).

Lewis Robbins
sumber
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("#.##"));
Michael Zilbermann
sumber
3
new DecimalFormat("#0.00").format(4.0d);
Subhrajyoti Majumder
sumber
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

achAmháin
sumber
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;
Md. Sajedul Karim
sumber
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

Fazil
sumber
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));
    }

}
Mayank Parihar
sumber
-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));
    }

}
Nick
sumber
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));
flosk8
sumber
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.

Edgar Rivas
sumber