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

IT小君   2021-09-26T06:33:40

如何在Java中设置千位分隔符?
我有一个 BigDecimal 的字符串表示,我想用千位分隔符格式化并作为字符串返回。

点击广告,支持我们为你提供更好的服务
评论(11)
IT小君

您可以使用带“,”的格式函数;

int no = 124750;
String str = String.format("%,d", no);

//str = 124,750

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

文档

2021-09-26T06:33:41   回复
IT小君

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

2021-09-26T06:33:41   回复
IT小君
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()));
2021-09-26T06:33:41   回复
IT小君

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

    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"
2021-09-26T06:33:41   回复
IT小君

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

  1. 对于整数数据类型

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

  1. 对于浮点数据类型 String.format("%,.2f",58625.21) 和输出将是58,625.21
2021-09-26T06:33:42   回复
IT小君
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);
2021-09-26T06:33:42   回复
IT小君
NumberFormat nf = DecimalFormat.getInstance(myLocale);
DecimalFormatSymbols customSymbol = new DecimalFormatSymbols();
customSymbol.setDecimalSeparator(',');
customSymbol.setGroupingSeparator(' ');
((DecimalFormat)nf).setDecimalFormatSymbols(customSymbol);
nf.setGroupingUsed(true);
2021-09-26T06:33:42   回复
IT小君

对于小数

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));
2021-09-26T06:33:42   回复
IT小君

接受的答案必须真正改变,否则不起作用。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);

2021-09-26T06:33:43   回复
IT小君

如上所述,以下链接为您提供了特定的国家/地区代码,以允许 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
2021-09-26T06:33:43   回复
IT小君
public String formatStr(float val) {
 return String.format(Locale.CANADA, "%,.2f", val);
}

formatStr(2524.2) // 2,254.20



2021-09-26T06:33:43   回复