decimalformat核心是模式字符串,#表示可选数字不补零,0表示必显补零,,为千位分隔符,.为小数点;非线程安全,需避免共享实例或用threadlocal;解析时应设setparsebigdecimal(true)并手动关闭分组。

Java 中用 DecimalFormat 格式化数字,核心是定义模式字符串(pattern),再用它对数字做格式化或解析。它灵活、易用,但要注意线程安全和特殊符号含义。
基本用法:创建实例并格式化数字
DecimalFormat 是 NumberFormat 的子类,最常用方式是传入模式字符串构造对象:
- 模式中
#表示可选数字位(不补零),0表示必填数字位(不足补零) - 逗号
,表示千位分隔符,小数点.表示小数分隔符 - 例如:
"#,##0.00"→ 12345.6 格式化为"12,345.60"
常见模式写法与对应效果
根据需求选择合适模式,注意正负数是否统一处理:
Java开发手册规约集合,基于阿里巴巴Java开发手册(嵩山版)。 涵盖7大维度:编程规约、异常日志、单元测试、安全规约、MySQL数据库、工程结构、设计规约。 当用户需要:(1) 编写或审查Java代码 (2) 检查命名/代码规范 (3) 处理异常和日志 (4) 编写单元测试 (5) 安全编码 (6) 数据库设...
-
"0.00":强制保留两位小数,不足补零(如5→"5.00") -
"#,###.##":带千分位,小数最多两位(如1000000.123→"1,000,000.12") -
"+0.00;-0.00":分别定义正数和负数格式(如-3.5→"-3.50") -
"00000":固定五位整数,不足左补零(如42→"00042")
设置分组分隔符和小数分隔符
默认使用本地化符号(如中文环境用“,”和“.”),可通过 DecimalFormatSymbols 自定义:
- 创建自定义符号对象:
DecimalFormatSymbols symbols = new DecimalFormatSymbols(Locale.US); - 传入构造器:
new DecimalFormat("###,###.##", symbols) - 也可单独设置:
df.setDecimalSeparator('.');df.setGroupingSeparator('_')
注意事项与避坑点
DecimalFormat 不是线程安全的,多线程环境下应避免共享实例:
- 推荐每个线程新建对象,或用
ThreadLocal缓存 - 解析字符串时(
parse())可能抛ParseException,需 try-catch - 模式中不能混用
#和0在同一数字段逻辑混乱处(如"#0.0#"虽合法但易误解) - 科学计数法支持有限,复杂场景建议用
String.format()或BigDecimal配合缩放
Java免费学习笔记:立即使用
解锁 Java 大师之旅:从入门到精通的终极指南










