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?

Jawaban:


292
System.out.println(NumberFormat.getNumberInstance(Locale.US).format(35634646));
Output: 35,634,646

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"


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 .


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


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

3

Solusi ini bekerja untuk saya:

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


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>

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

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

-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.


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

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.