String.format () untuk memformat ganda dalam java


178

Bagaimana saya bisa menggunakan String.format (format String, X) untuk memformat ganda seperti berikut ???

2354548.235 -> 2.354.548,23

Terima kasih!

Jawaban:


295
String.format("%1$,.2f", myDouble);

String.format secara otomatis menggunakan lokal default.


36
Anda juga dapat menggunakan lokal tertentu dengan menggunakanString.format(Locale.GERMAN, "%1$,.2f", myDouble);
Olivier Grégoire

13
Jika ada lebih dari satu dobel untuk memformat, gunakan% 1,% 2, dan seterusnya. Misalnya String.format ("% 1 $,. 2f,% 2 $,. 2f", myDouble, aDouble)
Moesio

4
Saya percaya "% 1 $" adalah opsional dalam hal ini. Bekerja untuk saya hanya dengan "%, 2f" sebagai format String.
Matt Passell

5
Ya, Matt benar. %1, %2dan seterusnya dapat digunakan untuk memesan ulang output berdasarkan indeks argumen input Anda. Lihat ini . Anda dapat menghilangkan indeks dan urutan default akan diasumsikan oleh formatter.
praneetloke

1
Anda harus memberikan penjelasan apa arti bagian yang berbeda.
Mitulát báti

41
String.format("%4.3f" , x) ;

Ini berarti bahwa kita memerlukan total 4 digit dalam ans, dimana 3 harus setelah desimal. Dan f adalah penentu format ganda. x berarti variabel yang ingin kita temukan. Bekerja untukku. . .


1
Saya pikir itu berarti akan menjadi variabel keempat dalam argumen yang mengikuti dan memiliki 3 tempat setelah desimal.
Michael Fulton

@MichaelFulton Tidak semudah itu: String.format("%014.3f" , 58.656565)-> 0000000058,657: total 14 simbol: 8 nol dan 5 angka dan 1 koma. Jadi dalam hal ini angka 14 berarti jumlah total simbol (yang ekstra diganti dengan awalan nol, bisa hilang tanpa, maka itu akan diganti dengan spasi) dalam string hasil . Bagian .3ini sepenuhnya independen di sini.
parsecer

Namun di sini: String.format("%014.3f" , 58.656565)-> 58,657. Saya mengambilnya karena preferensi pergi ke .3fbagian: pertama-tama mencetak angka dengan 3 tempat desimal dan setelah jika ada simbol kiri itu mencetak spasi terdepan (atau nol / apa pun). Dalam hal ini angkanya 2 + 3 + 1 = 6 simbol dan kami hanya ingin mencetak 4, jadi tidak ada spasi tambahan.
parsecer

24

Jika Anda ingin memformatnya dengan menetapkan simbol secara manual, gunakan ini:

DecimalFormatSymbols decimalFormatSymbols = new DecimalFormatSymbols();
decimalFormatSymbols.setDecimalSeparator('.');
decimalFormatSymbols.setGroupingSeparator(',');
DecimalFormat decimalFormat = new DecimalFormat("#,##0.00", decimalFormatSymbols);
System.out.println(decimalFormat.format(1237516.2548)); //1,237,516.25

Format berbasis lokal lebih disukai.


3
Jawaban yang berguna! Namun, kalimat terakhir "pemformatan berbasis lokal lebih disukai, meskipun" tidak masuk akal tanpa konteks. Ada beberapa kasus penggunaan yang cukup bagus di mana Anda TIDAK boleh menggunakan pemformatan berbasis lokal, ketika Anda ingin menghasilkan format spesifik dari String. Misalnya Anda menerapkan ekspor data Anda ke file eksternal dan Anda ingin memiliki kontrol penuh atas format, tidak tergantung pada lokal saat ini (atau apa pun).
Honza Zidek

20

kode diekstraksi dari tautan ini ;

Double amount = new Double(345987.246);
NumberFormat numberFormatter;
String amountOut;

numberFormatter = NumberFormat.getNumberInstance(currentLocale);
amountOut = numberFormatter.format(amount);
System.out.println(amountOut + " " + 
                   currentLocale.toString());

Output dari contoh ini menunjukkan bagaimana format angka yang sama bervariasi dengan Lokal:

345 987,246  fr_FR
345.987,246  de_DE
345,987.246  en_US

13
public class MainClass {
   public static void main(String args[]) {
    System.out.printf("%d %(d %+d %05d\n", 3, -3, 3, 3);

    System.out.printf("Default floating-point format: %f\n", 1234567.123);
    System.out.printf("Floating-point with commas: %,f\n", 1234567.123);
    System.out.printf("Negative floating-point default: %,f\n", -1234567.123);
    System.out.printf("Negative floating-point option: %,(f\n", -1234567.123);

    System.out.printf("Line-up positive and negative values:\n");
    System.out.printf("% ,.2f\n% ,.2f\n", 1234567.123, -1234567.123);
  }
}

Dan cetak:

3 (3) +3 00003
Format titik-mengambang default: 1234567,123000
Titik-mengambang dengan koma: 1.234.567.123000 Standar
titik-mengambang negatif: -1.234.567.123000
Opsi titik-mengambang negatif: (1.234.567, 123000)

Nilai-nilai positif dan negatif line-up:
1.234.567,12
-1.234.567,12


2

Ada banyak cara Anda bisa melakukan ini. Itu diberikan di bawah ini:

Misalkan nomor asli Anda diberikan di bawah ini: angka ganda = 2354548.235;

Menggunakan NumberFormatdan mode Pembulatan

NumberFormat nf = DecimalFormat.getInstance(Locale.ENGLISH);
    DecimalFormat decimalFormatter = (DecimalFormat) nf;
    decimalFormatter.applyPattern("#,###,###.##");
    decimalFormatter.setRoundingMode(RoundingMode.CEILING);

    String fString = decimalFormatter.format(number);
    System.out.println(fString);

Menggunakan formatter String

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

Dalam semua kasus, hasilnya adalah: 2354548.24

Catatan :

Selama pembulatan, Anda dapat menambahkan RoundingModedalam formatter 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 ini adalah impornya :

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

1

Menggunakan DecimalFormat

 NumberFormat nf = DecimalFormat.getInstance(Locale.ENGLISH);
 DecimalFormat decimalFormatter = (DecimalFormat) nf;
 decimalFormatter.applyPattern("#,###,###.##");
 String fString = decimalFormatter.format(myDouble);
 System.out.println(fString);
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.