将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.12NumberFormat.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 这破站
                                        这破站