decimalformat通过setgroupingsize(int size)设置整数部分从个位向左每size位分组,需配合setgroupingused(true)生效;默认值为3,0非法;分组符可自定义,但格式字符串中的“,”会覆盖该设置。

DecimalFormat 通过 setGroupingSize(int size) 控制数字整数部分的分组大小,即每多少位数字插入一个分组分隔符(如逗号、点等)。这个设置只在启用分组时生效,需配合 setGroupingUsed(true) 才会实际显示分隔符。
分组大小的本质
它定义的是从个位开始向左,每 size 位划分为一组。例如:
-
setGroupingSize(3)→1234567显示为1,234,567(标准千分位) -
setGroupingSize(2)→1234567显示为1,23,45,67(常见于印度数字分组习惯) -
setGroupingSize(4)→12345678显示为1234,5678
关键操作要点
- 分组分隔符默认是逗号(
,),可通过DecimalFormatSymbols.setGroupingSeparator(char)修改 - 必须调用
setGroupingUsed(true)启用分组;设为false时,无论GroupingSize是多少都不显示分隔符 - 若未显式设置
GroupingSize,默认值为 3(与Locale.getDefault()的常规千分位一致) -
setGroupingSize(0)是非法值,会抛出IllegalArgumentException
常用写法示例
DecimalFormat df = new DecimalFormat();
df.setGroupingUsed(true);
df.setGroupingSize(4); // 每4位一组
// 可选:自定义分隔符为点
DecimalFormatSymbols symbols = df.getDecimalFormatSymbols();
symbols.setGroupingSeparator('.');
df.setDecimalFormatSymbols(symbols);
System.out.println(df.format(12345678)); // 输出:1234.5678
注意兼容性细节
-
setGroupingSize()不影响小数部分,仅作用于整数左侧 - 如果同时使用了格式模式字符串(如
"#,##0.00"),模式中的,占位符会覆盖setGroupingSize()的效果,此时以模式为准 - 在多语言环境(如印度语 Locale)中,
getPercentInstance()或getCurrencyInstance()返回的DecimalFormat可能自带非3的默认分组大小,建议显式设置以确保一致性
不复杂但容易忽略。










