如何使用 DecimalFormat 设置数字的千分位分隔符及小数点掩码?
- 内容介绍
- 相关推荐
本文共计742个文字,预计阅读时间需要3分钟。
直接生效的方式是使用带有占位符的+pattern+字符串构造,例如:
setGroupingUsed(true) 和 pattern 里的 , 不是互斥关系
如果你用无参构造器创建 DecimalFormat,再调用 setGroupingUsed(true),它只会启用默认分组(如英文 locale 下用逗号),但不会自动加小数位控制或指定分隔符字符。真正决定“是否分组”“用什么符号分组”“小数点后几位”的,还是 pattern 字符串本身。所以更稳妥的做法是:直接写完整 pattern,避免依赖 locale 或后续 setter 调用顺序。
-
new DecimalFormat("#,###")→ 整数部分分组,无小数 -
new DecimalFormat("0,000.00")→ 强制整数至少 4 位(不足补零),小数固定两位 -
new DecimalFormat("#,##0.##")→ 整数部分分组,小数最多两位(末尾零不显示)
想换千分位符号?别改 pattern,改 DecimalFormatSymbols
pattern 里的 , 只是个占位指令,实际渲染成什么字符(逗号、点、空格、甚至竖线),由 DecimalFormatSymbols 控制。
本文共计742个文字,预计阅读时间需要3分钟。
直接生效的方式是使用带有占位符的+pattern+字符串构造,例如:
setGroupingUsed(true) 和 pattern 里的 , 不是互斥关系
如果你用无参构造器创建 DecimalFormat,再调用 setGroupingUsed(true),它只会启用默认分组(如英文 locale 下用逗号),但不会自动加小数位控制或指定分隔符字符。真正决定“是否分组”“用什么符号分组”“小数点后几位”的,还是 pattern 字符串本身。所以更稳妥的做法是:直接写完整 pattern,避免依赖 locale 或后续 setter 调用顺序。
-
new DecimalFormat("#,###")→ 整数部分分组,无小数 -
new DecimalFormat("0,000.00")→ 强制整数至少 4 位(不足补零),小数固定两位 -
new DecimalFormat("#,##0.##")→ 整数部分分组,小数最多两位(末尾零不显示)
想换千分位符号?别改 pattern,改 DecimalFormatSymbols
pattern 里的 , 只是个占位指令,实际渲染成什么字符(逗号、点、空格、甚至竖线),由 DecimalFormatSymbols 控制。

