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

Fun*_*ime 113 java bigdecimal

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

syl*_*loc 213

你可以使用格式函数",";

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

//str = 124,750
Run Code Online (Sandbox Code Playgroud)

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

文档

  • @Enissay使用显式语言环境调用`format()`(`Local.US`已知使用`,`作为分隔符)然后用自定义分隔符替换`,`:`String.format(Locale.US," %,d",n).replace(',','.')`. (15认同)
  • 如果我想使用`.`作为分隔符怎么办? (8认同)
  • @ImanMarashi 将其转换为 `int`。或者'长'。或者一个“BigInteger”。如果你想使用 `double`、`float` 或 `BigDecimal`,请使用 f。 (2认同)

And*_*s_D 98

这应该工作(未经测试,基于JavaDoc):

DecimalFormat formatter = (DecimalFormat) NumberFormat.getInstance(Locale.US);
DecimalFormatSymbols symbols = formatter.getDecimalFormatSymbols();

symbols.setGroupingSeparator(' ');
formatter.setDecimalFormatSymbols(symbols);
System.out.println(formatter.format(bd.longValue()));
Run Code Online (Sandbox Code Playgroud)

根据JavaDoc,第一行中的强制转换应该保存为大多数语言环境.

  • 未经测试的评论:javadoc为`getDecimalFormatSymbols()`说:`返回:所需DecimalFormatSymbols`的副本.所以你应该在改变副本后使用`setDecimalFormatSymbols(theCopy)`. (16认同)
  • bd.longValue()的文档说"任何小数部分都将被丢弃".所以我不知道如果你关心精度,这是否是最好的方法 (6认同)
  • 为什么硬编码美国?你永远不应该那样! (4认同)
  • 你为什么叫longValue?问题是为BigDecimal设置了数千个运算符,不长. (3认同)
  • 我想你可以使用`new`并将其设置回格式化:`DecimalFormatSymbols customSymbol = new DecimalFormatSymbols();``customSymbol.setDecimalSeparator(decimalSeperator.charAt(0));``customSymbol.setGroupingSeparator(thousandSeperator);``formatter .setDecimalFormatSymbols(customSymbol);` (2认同)
  • 我认为您会想使用 \u00a0 (不间断空格)作为分组分隔符。这是某些语言环境的默认设置。 (2认同)

ada*_*shr 49

BigDecimal bd = new BigDecimal(300000);

NumberFormat formatter = NumberFormat.getInstance(new Locale("en_US"));

System.out.println(formatter.format(bd.longValue()));
Run Code Online (Sandbox Code Playgroud)

编辑

要获取自定义分组分隔符(如空格),请执行以下操作:

DecimalFormatSymbols symbols = DecimalFormatSymbols.getInstance();
symbols.setGroupingSeparator(' ');

DecimalFormat formatter = new DecimalFormat("###,###.##", symbols);
System.out.println(formatter.format(bd.longValue()));
Run Code Online (Sandbox Code Playgroud)


del*_*via 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"
Run Code Online (Sandbox Code Playgroud)

  • 你也试试这个,在JasperReports的情况下,强制格式正确:`parameters.put("REPORT_LOCALE",新的Locale("pt","BR"));`发送此参数到报告. (2认同)

Waq*_*med 13

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

  1. 对于整数数据类型

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

  1. 对于浮点数据类型 String.format("%,.2f",58625.21) 和输出将是58,625.21


小智 6

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

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

...(new Locale(<COUNTRY CODE HERE>));
Run Code Online (Sandbox Code Playgroud)

例如,瑞士的数字格式如下:

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));
Run Code Online (Sandbox Code Playgroud)

结果符合预期:

1'000.00
Run Code Online (Sandbox Code Playgroud)


Dea*_*mer 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);
Run Code Online (Sandbox Code Playgroud)


小智 5

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

formatStr(2524.2) // 2,254.20
Run Code Online (Sandbox Code Playgroud)

  • 虽然此代码可以提供问题的解决方案,但最好添加有关其工作原理/原因的上下文。这可以帮助未来的用户学习并将这些知识应用到他们自己的代码中。当代码被解释时,您也可能会以点赞的形式得到用户的积极反馈。 (2认同)