Java数字转货币格式,NumberFormat两行代码就搞定
上周新来的同事在群里甩了张截图Java数字转货币格式,NumberFormat两行代码就搞定,后台订单列表里金额一列全是"1234567",产品原话是"看着跟原始数据似的,能加上人民币符号和千分位吗"。这种需求我太熟了,NumberFormat 基本是标配,写个工具方法两行就能返回"¥1,234,567.00",比手拼字符串靠谱多了。
最常用的写法是 NumberFormat.getNumberInstance(Locale.CHINA) 拿到格式化器,再调 setCurrency(Currency.getInstance("CNY")) 绑定币种,它会自动把符号、分组、小数位全安排好。如果你只想快速输出不关心 Locale 细节,DecimalFormat 配个 "¥#,##0.00" 的 pattern 字符串更直接,一行搞定,特别适合写单测或临时调试。

生产环境里有个坑——金额千万别用 double 或 float 喂进去,BigDecimal 才是正解。把订单金额以"分"为最小单位存储,展示时除以 100 转成元再交给 NumberFormat,既避开了浮点精度丢失,也贴合财务侧"先算后转"的审计习惯。
还有个容易忽略的点:同一套服务给国内和东南亚用户同时用的时候,币种符号、小数点位置、千分位符全变了。这时候把 Locale 参数做成可配置的,别写死 CNYjava怎么将一串数字转为货币形式,在 Currency.getInstance() 里塞动态值,一套代码多地区通吃。