【发布时间】:2011-07-16 11:04:28
【问题描述】:
如何在 Java 中设置千位分隔符?
我有一个 BigDecimal 的字符串表示形式,我想用千位分隔符对其进行格式化并以字符串形式返回。
【问题讨论】:
标签: java number-formatting bigdecimal
如何在 Java 中设置千位分隔符?
我有一个 BigDecimal 的字符串表示形式,我想用千位分隔符对其进行格式化并以字符串形式返回。
【问题讨论】:
标签: java number-formatting bigdecimal
您可以使用格式功能与“,”;
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。如果您想使用double、float 或BigDecimal,请使用 f。
这应该可以工作(未经测试,基于 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() 的 Javadoc 说: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);
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);
【讨论】:
NumberFormat nf = DecimalFormat.getInstance(myLocale);
DecimalFormatSymbols customSymbol = new DecimalFormatSymbols();
customSymbol.setDecimalSeparator(',');
customSymbol.setGroupingSeparator(' ');
((DecimalFormat)nf).setDecimalFormatSymbols(customSymbol);
nf.setGroupingUsed(true);
【讨论】:
对于小数:
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));
【讨论】:
如上所述,下面的link 为您提供了特定的国家代码,以允许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
【讨论】:
使用下划线 (_) 使代码本身中的文字数值更具可读性:
int example = 12_004_953; // Twelve million four thousand nine hundred fifty-three
【讨论】: