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

如何在 Java 中设置数千个分隔符?
我有一个 BigDecimal 的 String 表示形式,我想用一个数千个分隔符格式化它,并返回为 String。

211695 次浏览
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()));

这应该可以工作(未经测试,基于 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,应该为大多数地区保存第一行中的强制转换。

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

您可以使用格式化函数与“ ,”;

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


//str = 124,750

“ ,”包括区域设置特定的分组字符。

医生

试试这段代码的格式,就像巴西使用的那样:

    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"

接受的答案必须真正改变,否则不起作用。 GetDecimalFormatSymbols制作了一个防御性的副本。因此,

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


symbols.setGroupingSeparator(' ');
formatter.setDecimalFormatSymbols(symbols);
System.out.println(formatter.format(bd.longValue()));

新的线路是这一个: SetDecimalFormatSymbols (符号) ;

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

如上所述,下面的 链接为您提供了特定的国家代码,以允许 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

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

1. 对于整数数据类型

String.format("%,d\n", 58625)

产出:

58,625

2. 浮点数据类型

String.format("%,.2f",58625.21)

产出:

58,625.21
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