将BigDecimal格式化为带千分位分隔符的字符串
将BigDecimal的金额格式化
References:
- https://stackoverflow.com/questions/5323502/how-to-set-thousands-separator-in-java
- https://lanlan2017.github.io/JavaReadingNotes/22b981f1/
直接上代码
public static String formatThousandsSeparator(BigDecimal amount) {
DecimalFormat formatter = (DecimalFormat) NumberFormat.getInstance();
DecimalFormatSymbols symbols = formatter.getDecimalFormatSymbols();
symbols.setGroupingSeparator(',');
formatter.setDecimalFormatSymbols(symbols);
formatter.setMaximumFractionDigits(4);
return formatter.format(amount);
}
// input: 45678910.12
// output: 45,678,910.12
NumberFormat.getInstance();这个方法可以传Locale, 在只格式化金额的时候没什么用, 但是涉及币种就很方便了。
import java.util.*;
import java.text.*;
public class NumberFormatTest {
public static void main(String[] args) {
// 需要被格式化的数字
double db = 1234000.567;
// 创建四个Locale,分别代表中国、日本、德国、美国
Locale[] locales = { Locale.CHINA, Locale.JAPAN, Locale.GERMAN, Locale.US };
NumberFormat[] nf = new NumberFormat[12];
// 为上面四个Locale创建12个NumberFormat对象
// 每个Locale分别有通用数值格式器、百分比格式器、货币格式器
for (int i = 0; i < locales.length; i++) {
nf[i * 3] = NumberFormat.getNumberInstance(locales[i]);
nf[i * 3 + 1] = NumberFormat.getPercentInstance(locales[i]);
nf[i * 3 + 2] = NumberFormat.getCurrencyInstance(locales[i]);
}
for (int i = 0; i < locales.length; i++) {
String tip = i == 0 ? "----中国的格式----"
: i == 1 ? "----日本的格式----" : i == 2 ? "----德国的格式----" : "----美国的格式----";
System.out.println(tip);
System.out.println("通用数值格式:" + nf[i * 3].format(db));
System.out.println("百分比数值格式:" + nf[i * 3 + 1].format(db));
System.out.println("货币数值格式:" + nf[i * 3 + 2].format(db));
}
}
}
结果
----中国的格式----
通用数值格式:1,234,000.567
百分比数值格式:123,400,057%
货币数值格式:¥1,234,001
----德国的格式----
通用数值格式:1.234.000,567
百分比数值格式:123.400.057 %
货币数值格式:1.234.000,57 ¤
----美国的格式----
百分比数值格式:123,400,057%
货币数值格式:$1,234,000.57