Bagaimana saya bisa memformat nomor String untuk memiliki koma dan bulat?


142

Apa cara terbaik untuk memformat nomor berikut yang diberikan kepada saya sebagai sebuah String?

String number = "1000500000.574" //assume my value will always be a String

Saya ingin ini menjadi String dengan nilai: 1,000,500,000.57

Bagaimana saya bisa memformatnya?

Jawaban:


256

Anda mungkin ingin melihat DecimalFormatkelas; ini mendukung lokal yang berbeda (misalnya: di beberapa negara yang akan diformat sebagai 1.000.500.000,57gantinya).

Anda juga perlu mengubah string itu menjadi angka, ini dapat dilakukan dengan:

double amount = Double.parseDouble(number);

Contoh kode:

String number = "1000500000.574";
double amount = Double.parseDouble(number);
DecimalFormat formatter = new DecimalFormat("#,###.00");

System.out.println(formatter.format(amount));

dapatkah Anda menunjukkan contoh bagaimana saya bisa menggunakan NumberFormat dengan case khusus ini?
Sheehan Alam

1
Anda juga dapat menggunakan solusi di bawah ini - String public static getRoundOffValue (nilai ganda) {DecimalFormat df = DecimalFormat baru ("##, ##, ##, ##, ##, ##, ##, ##, ## 0.00"); return df.format (nilai); }
Jitendra Nath

Saya juga lebih suka nol sebelum titik seperti DecimalFormat formatter = new DecimalFormat ("#, ## 0.00"); - mendapatkan 0,00 untuk nol kedengarannya salah untukku
Leo

45

Ini juga dapat dilakukan dengan menggunakan String.format (), yang mungkin lebih mudah dan / atau lebih fleksibel jika Anda memformat banyak angka dalam satu string.

    String number = "1000500000.574";
    Double numParsed = Double.parseDouble(number);

    System.out.println(String.format("The input number is: %,.2f", numParsed));
    // Or
    String numString = String.format("%,.2f", numParsed);

Untuk string format "%, 2f" - "," berarti grup digit yang terpisah dengan koma, dan ".2" berarti membulatkan ke dua tempat setelah desimal.

Untuk referensi tentang opsi pemformatan lain, lihat https://docs.oracle.com/javase/tutorial/java/data/numberformat.html


42

Setelah Anda mengonversi String Anda menjadi angka, Anda dapat menggunakannya

// format the number for the default locale
NumberFormat.getInstance().format(num)

atau

// format the number for a particular locale
NumberFormat.getInstance(locale).format(num)

Bagaimana cara menentukan lokal dan membulatkan ke (katakanlah) 2 desimal?
Jonik

6
Ah, sudahlah, temukan:new DecimalFormat("0.##", DecimalFormatSymbols.getInstance(locale))
Jonik

16

Mengingat ini adalah hasil Google nomor satu format number commas java, inilah jawaban yang berfungsi untuk orang-orang yang bekerja dengan bilangan bulat dan tidak peduli dengan desimal.

String.format("%,d", 2000000)

output:

2,000,000

juga berfungsi untuk mengapung, misalnya, printf ("%, f \ n", decimalNumber)
philwalk

12

Saya telah membuat utilitas pemformatan saya sendiri. Yang sangat cepat memproses format bersama dengan memberi Anda banyak fitur :)

Ini mendukung:

  • Format Koma Misalnya 1234567 menjadi 1.234.567.
  • Awalan dengan "Ribu (K), Juta (M), Miliar (B), Triliun (T)".
  • Ketelitian 0 hingga 15.
  • Mengubah ukuran presisi (Berarti jika Anda menginginkan presisi 6 digit, tetapi hanya memiliki 3 digit yang tersedia, maka akan memaksa ke 3).
  • Penurunan awalan (Berarti jika awalan yang Anda pilih terlalu besar itu menurunkannya ke awalan yang lebih cocok).

Kode dapat ditemukan di sini . Anda menyebutnya seperti ini:

public static void main(String[])
{
   int settings = ValueFormat.COMMAS | ValueFormat.PRECISION(2) | ValueFormat.MILLIONS;
   String formatted = ValueFormat.format(1234567, settings);
}

Saya juga harus menunjukkan ini tidak menangani dukungan desimal, tetapi sangat berguna untuk nilai integer. Contoh di atas akan menampilkan "1.23M" sebagai output. Saya mungkin dapat menambahkan dukungan desimal mungkin, tetapi tidak melihat terlalu banyak digunakan untuk itu sejak itu saya mungkin juga menggabungkan ini menjadi jenis kelas BigInteger yang menangani array char [] yang dikompresi untuk perhitungan matematika.


2
Ini bagus jika Anda hanya bekerja dalam bahasa Inggris. Saran saya adalah untuk menghindari hal-hal seperti itu membuat marah makan malam pengguna non-Inggris saya karena mereka tidak bisa mengerti apa Katau Martinya
rishabhmhjn

@rishabhmhjn tapi ... tidak bisakah Anda hanya men-tweak untuk memodifikasi surat yang Anda butuhkan? Apakah nasib burukmu salahnya? : o dan apa yang dia buat cukup keren, meskipun tautannya tampaknya tidak tersedia saat ini ..
Aquarius Power

@AquariusPower masalahnya adalah, mis., Nomor Jepang tidak mengikuti sistem metrik. Jumlah mereka seperti 1 百 untuk 100, 1 千 untuk 1000, 1 万 untuk 10.000, kemudian menjadi 1 千万 untuk 1000.0000. Tim saya sedang mengerjakan sesuatu yang serupa di Javascript. Anda dapat menggunakan logika yang disebutkan di sini: github.com/statusbrew/angular-bignumber
rishabhmhjn

Menemukan kode lama saya untuk ini jadi saya mengunggahnya kembali ke GitHub. Tautan dalam komentar telah diperbarui.
Jeremy Trifilo

6
public void convert(int s)
{
    System.out.println(NumberFormat.getNumberInstance(Locale.US).format(s));
}

public static void main(String args[])
{
    LocalEx n=new LocalEx();
    n.convert(10000);
}

6

Anda juga dapat menggunakan solusi di bawah ini -

public static String getRoundOffValue(double value){

        DecimalFormat df = new DecimalFormat("##,##,##,##,##,##,##0.00");
        return df.format(value);
}

4

Anda dapat melakukan seluruh konversi dalam satu baris, menggunakan kode berikut:

String number = "1000500000.574";
String convertedString = new DecimalFormat("#,###.##").format(Double.parseDouble(number));

Dua tanda # terakhir dalam konstruktor DecimalFormat juga bisa 0s. Either way bekerja.


3

Jawaban pertama berfungsi dengan sangat baik, tetapi untuk NOL / 0 akan memformat sebagai 0,00

Karenanya format #, ## 0.00 bekerja dengan baik untuk saya. Selalu uji angka yang berbeda seperti 0/100 / 2334.30 dan angka negatif sebelum digunakan untuk sistem produksi.


3

Inilah cara paling sederhana untuk sampai ke sana:

String number = "10987655.876";
double result = Double.parseDouble(number);
System.out.println(String.format("%,.2f",result)); 

output: 10.987.655,88

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.