Konversi Integer ke String dengan koma untuk ribuan

182

Saya ingin mengonversi Integer 35634646 untuk memiliki ribuan "," jadi seharusnya 35.634.646.

Apa cara tercepat untuk melakukan itu?

Dominik
sumber

Jawaban:

292
System.out.println(NumberFormat.getNumberInstance(Locale.US).format(35634646));
Output: 35,634,646
Eng.Fouad
sumber
5
Saya harus menambahkan import java.text.NumberFormat;.
Mike S
6
Ini memaksa pengelompokan gaya AS yang selalu digunakan ,, namun ada juga wilayah yang menggunakan .pengelompokan. Singkatnya, pengodean lokal dianggap sebagai praktik yang buruk.
Hai Zhang
4
@DreaminginCode Untuk melakukannya dengan baik Locale.getCurrent()adalah solusinya
Roger RV
@RogerRV Tidak ada Lokal.getCurrent () (setidaknya di android)
E.Akio
Yeh ini bukan jawaban terbaik untuk 96% orang yang tidak tinggal di AS
fig
152

Anda meminta yang tercepat, tetapi mungkin maksud Anda "terbaik" atau "benar" atau "khas"?

Anda juga meminta tanda koma untuk menunjukkan ribuan, tetapi mungkin maksud Anda "dalam bentuk yang dapat dibaca manusia normal sesuai dengan kebiasaan lokal pengguna Anda"?

Anda melakukannya seperti itu:

    int i = 35634646;
    String s = NumberFormat.getIntegerInstance().format(i);

Orang Amerika akan mendapatkan "35.634.646"

Jerman akan mendapatkan "35.634.646"

Jerman Swiss akan mendapatkan "35'634'646"

Steve McLeod
sumber
Di mana saya bisa mendapatkan pola nomor setiap lokal? Saya mencoba membaca kode tetapi tidak dapat menemukannya di mana pun
nhoxbypass
41

Integer:

int value = 100000; 
String.format("%,d", value); // outputs 100,000

Ganda:

double value = 21403.3144d;
String.format("%,.2f", value); // outputs 21,403.31

String.format cukup kuat.

- Diedit per umpan psuzzi .

Frankie
sumber
1
Keuntungan: Tidak ada "baru", tidak memuat pengumpul sampah (tidak seperti DecimalFormat).
Contango
Silahkan lihat String.format. Ini dimulai dengan return new Formatter(l) ...dll. Jadi argumen pengumpul sampah tidak sekuat kelihatannya.
Scheintod
2
Ini adalah jawaban favorit saya, pertanyaannya adalah bekerja dengan Integer, jadi ini kode: int value = 100000; String.format ("%, d", value);
psuzzi
20
 int value = 35634646;
 DecimalFormat myFormatter = new DecimalFormat("#,###");
 String output = myFormatter.format(value);
 System.out.println(output);

Keluaran: 35,634,646

Bala R
sumber
1
Pola Anda tidak lebih dari #,###, jika Anda ingin memformat gaya Eropa maka Anda dapat menggunakannya #,##,###.
Ali
7
@ Ali: Format yang Anda gambarkan hanya digunakan di India, dan saya setidaknya 90% yakin India tidak ada di Eropa.
Cairnarvon
Saya mengerti ... baiklah, jika Anda membutuhkan format India maka itulah cara Anda melakukannya.
Ali
1
Ini bergantung pada lokal dan tidak akan menghasilkan output yang benar (sesuai pertanyaan) jika dijalankan di mana lokal default tidak memisahkan ribuan dengan a ,.
antak
17

Jawaban lainnya benar, namun periksa kembali lokal Anda sebelum menggunakan "%,d":

Locale.setDefault(Locale.US);
int bigNumber = 35634646;
String formattedNumber = String.format("%,d", bigNumber);
System.out.println(formattedNumber);

Locale.setDefault(new Locale("pl", "PL"));
formattedNumber = String.format("%,d", bigNumber);
System.out.println(formattedNumber);

Hasil:

35,634,646
35 634 646
Grzegorz Szpetkowski
sumber
3

Solusi ini bekerja untuk saya:

NumberFormat.getNumberInstance(Locale.US).format(Integer.valueOf("String Your Number"));
SEBAGAI
sumber
3

Gunakan %dspecifier format dengan koma:%,d

Sejauh ini cara termudah.

Annie Johnson
sumber
1

Jika hal yang sama harus dilakukan di JSP, gunakan:

<fmt:formatNumber pattern="#,##0" value="${yourlist.yourintvalue}" var="formattedVariable" />
<c:out value="${formattedVariable}"></c:out>

ofcourse untuk beberapa nilai gunakan:

<c:forEach items="${yourlist}" var="yourlist">

    <fmt:formatNumber pattern="#,##0" value="${yourlist.yourintvalue}" var="formattedVariable" />
    <c:out value="${formattedVariable}"></c:out>
</c:forEach>
Navankur Chauhan
sumber
1

inilah solusi bagi Anda yang tidak dapat mengakses "numberformat" atau "String.format" (menggunakan versi terbatas java di dalam suatu kerangka kerja). Semoga bermanfaat.

number= 123456789;
thousandsSeparator=",";
myNumberString=number.toString();   
numberLength=myNumberString.length;
howManySeparators=Math.floor((numberLength-1)/3)
formattedString=myNumberString.substring(0,numberLength-(howManySeparators*3))
while (howManySeparators>0)    {
formattedString=formattedString+thousandsSeparator+myNumberString.substring(numberLength-(howManySeparators*3),numberLength-((howManySeparators-1)*3));
howManySeparators=howManySeparators-1;    }

formattedString
pengguna1807050
sumber
Pertimbangkan untuk mengedit jawaban Anda menambahkan beberapa komentar ke kode Anda (dan mungkin membungkusnya dalam suatu metode, sehingga bisa lebih berguna)
noiaverbale
0

gunakan ekstensi

import java.text.NumberFormat

val Int.commaString: String
  get() = NumberFormat.getInstance().format(this)

val String.commaString: String
  get() = NumberFormat.getNumberInstance().format(this.toDouble())

val Long.commaString: String
  get() = NumberFormat.getInstance().format(this)

val Double.commaString: String
  get() = NumberFormat.getInstance().format(this)

hasil

1234.commaString => 1,234
"1234.456".commaString => 1,234.456
1234567890123456789.commaString => 1,234,567,890,123,456,789
1234.456.commaString => 1,234.456
Changhoon
sumber
-1

tidak bisakah kamu menggunakan a

System.out.printf("%n%,d",int name);

Koma di printfharus menambahkan koma ke dalam %dantar.

Bukan positif tentang itu, tetapi bekerja untuk saya.

Josh
sumber
itu bukan kompilasi untuk saya
Mishax
"Tidak positif tentang itu." Tak berarti.
Rob Shepherd
-8

Pertama, Anda perlu memasukkan tag JSTL: -

<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<%@ taglib prefix="fmt" uri="http://java.sun.com/jsp/jstl/fmt" %> 

di awal halaman

Ankur
sumber