Java'da binlik ayırıcı nasıl ayarlanır?
Binlik ayırıcı ile biçimlendirmek ve String olarak dönmek istediğim bir BigDecimal'in String temsiline sahibim.
Java'da binlik ayırıcı nasıl ayarlanır?
Binlik ayırıcı ile biçimlendirmek ve String olarak dönmek istediğim bir BigDecimal'in String temsiline sahibim.
Yanıtlar:
Bu çalışmalıdır (JavaDoc'a göre test edilmemiştir):
DecimalFormat formatter = (DecimalFormat) NumberFormat.getInstance(Locale.US);
DecimalFormatSymbols symbols = formatter.getDecimalFormatSymbols();
symbols.setGroupingSeparator(' ');
formatter.setDecimalFormatSymbols(symbols);
System.out.println(formatter.format(bd.longValue()));
JavaDoc'a göre, ilk satırdaki döküm çoğu yerel ayar için kaydedilmelidir.
getDecimalFormatSymbols()
diyor: Returns: a copy of the desired DecimalFormatSymbols
. Bu yüzden setDecimalFormatSymbols(theCopy)
kopyayı değiştirdikten sonra kullanmalısınız .
new
ve biçimlendiriciye geri döndürebilirsiniz: DecimalFormatSymbols customSymbol = new DecimalFormatSymbols();
customSymbol.setDecimalSeparator(decimalSeperator.charAt(0));
customSymbol.setGroupingSeparator(thousandSeperator);
formatter.setDecimalFormatSymbols(customSymbol);
Biçim işlevini "," ile kullanabilirsiniz;
int no = 124750;
String str = String.format("%,d", no);
//str = 124,750
"," yerel ayara özgü gruplama karakterlerini içerir.
.
Bir ayırıcı olarak kullanmak istersem ne olur ?
format()
açık bir yerel ayarıyla ( Local.US
kullanım bilinen ,
ayırıcı olarak) ve daha sonra değiştirmek ,
özel ayırıcı ile: String.format(Locale.US, "%,d", n).replace(',', '.')
.
int
. Veya a long
. Veya a BigInteger
. Ve double
, float
veya kullanmak istiyorsanız f kullanın BigDecimal
.
BigDecimal bd = new BigDecimal(300000);
NumberFormat formatter = NumberFormat.getInstance(new Locale("en_US"));
System.out.println(formatter.format(bd.longValue()));
DÜZENLE
Boşluk gibi özel gruplama ayırıcısı almak için şunu yapın:
DecimalFormatSymbols symbols = DecimalFormatSymbols.getInstance();
symbols.setGroupingSeparator(' ');
DecimalFormat formatter = new DecimalFormat("###,###.##", symbols);
System.out.println(formatter.format(bd.longValue()));
NumberFormat
İstenilen özelliklere sahip bir nesne oluşturursunuz ve bunu BigDecimal
. A BigDecimal
yalnızca belirli bir değere sahiptir, belirli bir biçime sahip değildir .
Brezilya'da kullanıldığı gibi biçimlendirmek için bu kodu deneyin:
DecimalFormat df = new DecimalFormat(
"#,##0.00",
new DecimalFormatSymbols(new Locale("pt", "BR")));
BigDecimal value = new BigDecimal(123456.00);
System.out.println(df.format(value.floatValue()));
// results: "123.456,00"
parameters.put("REPORT_LOCALE", new Locale("pt", "BR"));
Bu parametreyi rapora gönderin.
Tamsayı veri türü için binlik ayırıcı kullanıyorsanız 1'i kullanın.
String.format ("%, d \ n", 58625) ve çıktı 58.625 olacaktır
DecimalFormatSymbols formatSymbols = new DecimalFormatSymbols();
formatSymbols.setDecimalSeparator('|');
formatSymbols.setGroupingSeparator(' ');
String strange = "#,##0.###";
DecimalFormat df = new DecimalFormat(strange, formatSymbols);
df.setGroupingSize(4);
String out = df.format(new BigDecimal(300000).doubleValue());
System.out.println(out);
NumberFormat nf = DecimalFormat.getInstance(myLocale);
DecimalFormatSymbols customSymbol = new DecimalFormatSymbols();
customSymbol.setDecimalSeparator(',');
customSymbol.setGroupingSeparator(' ');
((DecimalFormat)nf).setDecimalFormatSymbols(customSymbol);
nf.setGroupingUsed(true);
Kabul edilen cevap gerçekten değiştirilmelidir, aksi takdirde işe yaramaz. GetDecimalFormatSymbols bir savunma kopyasını yapar. Böylece,
DecimalFormat formatter = (DecimalFormat) NumberFormat.getInstance(Locale.US);
DecimalFormatSymbols symbols = formatter.getDecimalFormatSymbols();
symbols.setGroupingSeparator(' ');
formatter.setDecimalFormatSymbols(symbols);
System.out.println(formatter.format(bd.longValue()));
Yeni satır şudur: formatter.setDecimalFormatSymbols (semboller);
İçin ondalık :
DecimalFormatSymbols symbols = new DecimalFormatSymbols();
symbols.setGroupingSeparator(' ');
DecimalFormat dfDecimal = new DecimalFormat("###########0.00###");
dfDecimal.setDecimalFormatSymbols(symbols);
dfDecimal.setGroupingSize(3);
dfDecimal.setGroupingUsed(true);
System.out.println(dfDecimal.format(number));
Yukarıda belirtildiği gibi, aşağıdaki bağlantı , Java'nın numarayı yerelleştirmesine izin vermek için size belirli ülke kodunu verir. Her ülkenin kendi tarzı vardır.
Yukarıdaki bağlantıda, buraya yerleştirilmesi gereken ülke kodunu bulacaksınız:
...(new Locale(<COUNTRY CODE HERE>));
Örneğin İsviçre, sayıları aşağıdaki gibi biçimlendirir:
1000,00 -> 1'000,00
Bunu başarmak için aşağıdaki kodlar benim için çalışıyor:
NumberFormat nf = NumberFormat.getNumberInstance(new Locale("de","CH"));
nf.setMaximumFractionDigits(2);
DecimalFormat df = (DecimalFormat)nf;
System.out.println(df.format(1000.00));
Sonuç beklendiği gibi:
1'000.00
public String formatStr(float val) {
return String.format(Locale.CANADA, "%,.2f", val);
}
formatStr(2524.2) // 2,254.20