Bana verilen bir dizeyi Dize olarak biçimlendirmenin en iyi yolu nedir?
String number = "1000500000.574" //assume my value will always be a String
Bu değeri olan bir dize olmasını istiyorum: 1,000,500,000.57
Nasıl bu şekilde biçimlendirebilirim?
Bana verilen bir dizeyi Dize olarak biçimlendirmenin en iyi yolu nedir?
String number = "1000500000.574" //assume my value will always be a String
Bu değeri olan bir dize olmasını istiyorum: 1,000,500,000.57
Nasıl bu şekilde biçimlendirebilirim?
Yanıtlar:
DecimalFormatSınıfa bakmak isteyebilirsiniz ; farklı yerel ayarları destekler (örneğin: 1.000.500.000,57bunun yerine biçimlendirilecek bazı ülkelerde ).
Ayrıca bu dizeyi bir sayıya dönüştürmeniz gerekir, bu ile yapılabilir:
double amount = Double.parseDouble(number);
Kod örneği:
String number = "1000500000.574";
double amount = Double.parseDouble(number);
DecimalFormat formatter = new DecimalFormat("#,###.00");
System.out.println(formatter.format(amount));
Bu, bir dizede birden çok sayıyı biçimlendiriyorsanız daha kolay ve / veya daha esnek olabilen String.format () kullanılarak da gerçekleştirilebilir.
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);
Biçim dizesi için "% ,. 2f" - "," virgül içeren ayrı basamak grupları anlamına gelir ve ".2" ondalık basamaktan sonra iki yere yuvarlanır.
Diğer biçimlendirme seçeneklerine referans için bkz. Https://docs.oracle.com/javase/tutorial/java/data/numberformat.html
Dizenizi bir sayıya dönüştürdükten sonra,
// format the number for the default locale
NumberFormat.getInstance().format(num)
veya
// format the number for a particular locale
NumberFormat.getInstance(locale).format(num)
new DecimalFormat("0.##", DecimalFormatSymbols.getInstance(locale))
Bunun Google için bir numaralı sonuç olduğu göz önüne alındığında format number commas java, tam sayılarla çalışan ve ondalık sayıları önemsemeyen kişiler için çalışan bir yanıt.
String.format("%,d", 2000000)
çıktılar:
2,000,000
Kendi biçimlendirme aracımı oluşturdum. Hangi size birçok özellik vermek ile birlikte biçimlendirme işleme son derece hızlı :)
Destekler:
Kod burada bulunabilir . Buna şöyle diyorsunuz:
public static void main(String[])
{
int settings = ValueFormat.COMMAS | ValueFormat.PRECISION(2) | ValueFormat.MILLIONS;
String formatted = ValueFormat.format(1234567, settings);
}
Ayrıca, ondalık desteği işlemediğini, ancak tamsayı değerleri için çok yararlı olduğunu da belirtmeliyim. Yukarıdaki örnek çıktı olarak "1.23M" gösterecektir. Muhtemelen ondalık destek ekleyebilirdim, ama bunun için çok fazla kullanım görmedim, o zamandan beri bunu matematik hesaplamaları için sıkıştırılmış char [] dizilerini işleyen bir BigInteger sınıfında birleştirebilirim.
Kveya ne anlama Mgeldiğini anlayamazlar
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);
}
ayrıca aşağıdaki çözümü de kullanabilirsiniz -
public static String getRoundOffValue(double value){
DecimalFormat df = new DecimalFormat("##,##,##,##,##,##,##0.00");
return df.format(value);
}
Aşağıdaki kodu kullanarak dönüşümün tamamını tek bir satırda yapabilirsiniz:
String number = "1000500000.574";
String convertedString = new DecimalFormat("#,###.##").format(Double.parseDouble(number));
DecimalFormat yapıcısındaki son iki # işareti de 0 olabilir. Her iki şekilde de çalışır.
İlk cevap çok iyi çalışıyor, ancak ZERO / 0 için .00 olarak biçimlendirilecek
Bu nedenle #, ## 0.00 biçimi benim için iyi çalışıyor. Üretim sistemine dağıtımdan önce daima 0/100 / 2334.30 gibi farklı sayıları ve negatif sayıları test edin.
İşte oraya ulaşmanın en basit yolu:
String number = "10987655.876";
double result = Double.parseDouble(number);
System.out.println(String.format("%,.2f",result));
çıktı: 10.987.655,88