如何在DecimalFormat中配置小数部分的千位分隔符格式
解决DecimalFormat小数部分添加千位分隔符(下划线)的问题
要实现整数部分用逗号千分位、小数部分用下划线按三位分组的格式化效果,可以通过以下步骤完成:
- 配置DecimalFormat开启小数部分的分组功能,使用逗号作为临时分隔符。
- 格式化后将小数部分的逗号替换为下划线,保留整数部分的逗号不变。
完整代码示例
import java.text.DecimalFormat; import java.text.DecimalFormatSymbols; public class DecimalFormatDemo { public static void main(String[] args) { DecimalFormatSymbols symbols = new DecimalFormatSymbols(); symbols.setGroupingSeparator(','); // 整数部分用逗号分隔 // 模式说明:整数部分强制千分位,小数部分至少保留1位,最多保留9位(可根据需求调整) DecimalFormat fmt = new DecimalFormat("#,##0.0###", symbols); fmt.setGroupingUsed(true); // 启用分组功能 fmt.setDecimalGroupingSize(3); // 设置小数部分每3位分组 // 格式化并替换小数部分的分隔符 formatAndPrint(fmt, 1234.0); formatAndPrint(fmt, 0.1201); formatAndPrint(fmt, 0.00001234); } private static void formatAndPrint(DecimalFormat fmt, double num) { String formatted = fmt.format(num); // 替换小数部分的逗号为下划线,整数部分逗号保留 String result = formatted.replaceAll("\\.(.*)", m -> "." + m.group(1).replace(',', '_')); System.out.println(result); } }
代码说明
setDecimalGroupingSize(3):默认DecimalFormat仅对整数部分做分组,此方法开启小数部分的三位分组规则。- 正则替换:通过
replaceAll匹配小数点后的所有内容,将其中的临时分隔符逗号替换为下划线,确保整数部分的千分位逗号不受影响。 - 模式
#,##0.0###:#,##0保证整数部分至少显示1位且带千分位;.0###保证小数部分至少显示1位,最多显示4位(可根据需求调整#的数量来控制最大小数位数)。
内容的提问来源于stack exchange,提问作者Joe DiNottra
相关产品推荐
相关产品推荐

