Answers:
这应该可以工作(未经测试,基于JavaDoc):
DecimalFormat formatter = (DecimalFormat) NumberFormat.getInstance(Locale.US);
DecimalFormatSymbols symbols = formatter.getDecimalFormatSymbols();
symbols.setGroupingSeparator(' ');
formatter.setDecimalFormatSymbols(symbols);
System.out.println(formatter.format(bd.longValue()));
根据JavaDoc,对于大多数语言环境,应保存第一行的转换。
getDecimalFormatSymbols()
说:Returns: a copy of the desired DecimalFormatSymbols
。因此,您应setDecimalFormatSymbols(theCopy)
在更改副本后使用。
new
并将其设置回格式化程序: DecimalFormatSymbols customSymbol = new DecimalFormatSymbols();
customSymbol.setDecimalSeparator(decimalSeperator.charAt(0));
customSymbol.setGroupingSeparator(thousandSeperator);
formatter.setDecimalFormatSymbols(customSymbol);
您可以将格式功能与“,”一起使用;
int no = 124750;
String str = String.format("%,d", no);
//str = 124,750
“,”包括特定于语言环境的分组字符。
.
作为分隔符怎么办?
format()
使用显式语言环境(Local.US
已知,
用作分隔符)进行调用,然后替换,
为您的自定义分隔符:String.format(Locale.US, "%,d", n).replace(',', '.')
。
int
。还是一个long
。还是一个BigInteger
。而使用f如果你想使用double
,float
或BigDecimal
。
BigDecimal bd = new BigDecimal(300000);
NumberFormat formatter = NumberFormat.getInstance(new Locale("en_US"));
System.out.println(formatter.format(bd.longValue()));
编辑
要获取自定义分组分隔符(例如空格),请执行以下操作:
DecimalFormatSymbols symbols = DecimalFormatSymbols.getInstance();
symbols.setGroupingSeparator(' ');
DecimalFormat formatter = new DecimalFormat("###,###.##", symbols);
System.out.println(formatter.format(bd.longValue()));
NumberFormat
使用所需的属性来构建对象,然后使用该对象格式化您的BigDecimal
。一个BigDecimal
仅具有指定的值,没有指定的格式。
尝试将此代码格式化为巴西使用的格式:
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"));
将此参数发送到报表。
如果将千位分隔符用于整数数据类型,请使用1。
String.format(“%,d \ n”,58625),输出将为58,625
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);
接受的答案必须进行真正的更改,否则将无法正常工作。该getDecimalFormatSymbols使得防守副本。从而,
DecimalFormat formatter = (DecimalFormat) NumberFormat.getInstance(Locale.US);
DecimalFormatSymbols symbols = formatter.getDecimalFormatSymbols();
symbols.setGroupingSeparator(' ');
formatter.setDecimalFormatSymbols(symbols);
System.out.println(formatter.format(bd.longValue()));
新行是这一行:formatter.setDecimalFormatSymbols(symbols);
对于小数:
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));
如上所述,下面的链接为您提供了特定的国家/地区代码,以允许Java将数字本地化。每个国家都有自己的风格。
在上面的链接中,您将找到应该在此处输入的国家/地区代码:
...(new Locale(<COUNTRY CODE HERE>));
例如,瑞士的数字格式如下:
1000.00-> 1'000.00
为此,以下代码对我有效:
NumberFormat nf = NumberFormat.getNumberInstance(new Locale("de","CH"));
nf.setMaximumFractionDigits(2);
DecimalFormat df = (DecimalFormat)nf;
System.out.println(df.format(1000.00));
结果符合预期:
1'000.00
public String formatStr(float val) {
return String.format(Locale.CANADA, "%,.2f", val);
}
formatStr(2524.2) // 2,254.20