如何在Java中设置千位分隔符?

时间:2011-03-16 09:50:32

标签: java bigdecimal

如何在Java中设置千位分隔符? 我有BigDecimal的String表示,我想设置千位分隔符并返回String。

11 个答案:

答案 0 :(得分:204)

您可以将格式化功能与“,”;

一起使用
int no = 124750;
String str = String.format("%,d", no);

//str = 124,750

“,”包括特定于语言环境的分组字符。

docs

答案 1 :(得分:93)

这应该有效(未经测试,基于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,第一行中的强制转换应该保存为大多数语言环境。

答案 2 :(得分:48)

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()));

答案 3 :(得分:14)

尝试使用此代码格式化巴西使用的格式:

    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"

答案 4 :(得分:5)

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);

答案 5 :(得分:4)

NumberFormat nf = DecimalFormat.getInstance(myLocale);
DecimalFormatSymbols customSymbol = new DecimalFormatSymbols();
customSymbol.setDecimalSeparator(',');
customSymbol.setGroupingSeparator(' ');
((DecimalFormat)nf).setDecimalFormatSymbols(customSymbol);
nf.setGroupingUsed(true);

答案 6 :(得分:3)

接受的答案必须真正改变,否则无法正常工作。 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);

答案 7 :(得分:3)

public String formatStr(float val) {
 return String.format(Locale.CANADA, "%,.2f", val);
}

formatStr(2524.2) // 2,254.20



答案 8 :(得分:2)

小数

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));

答案 9 :(得分:0)

如上所述,下面的link为您提供了特定的国家/地区代码,以允许Java将数字本地化。每个国家都有自己的风格。

在上面的链接中,您将找到应该在此处输入的国家/地区代码:

...(new Locale(<COUNTRY CODE HERE>));
例如,

瑞士的数字格式如下:

1000.00-> 1'000.00

country code

要实现这一目标,请遵循以下代码

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

答案 10 :(得分:0)

如果您要对整数数据类型使用千位分隔符,请使用1。

  1. 对于整数数据类型

String.format(“%,d \ n”,58625)和输出将是 58,625

  1. 对于浮点数据类型 String.format(“%,. 2f”,58625.21),输出为 58,625.21