Java中如何使用NumberFormat实现hr地区自定义货币格式化
问题根因
NumberFormat.getInstance()在不传参的情况下,会使用JVM当前的默认地区规则执行格式化,你的运行环境默认Locale不是克罗地亚(hr),因此输出了千分位为,、小数位为.的2,300.99格式,不符合预期。
解决方案
格式化时显式传入克罗地亚地区对应的Locale实例即可,hr地区的官方数字书写规则就是用.做千分位分隔符、,做小数分隔符,会直接输出你要的2.300,99结果。
修改后的完整代码:
import java.text.NumberFormat; import java.util.Locale; class Main { public static void main(String[] args) { String in = "2300.99 EUR"; String out = formatCurrency(in); System.out.println(out); } private static String formatCurrency(String txt) { String[] part = txt.split(" ", 2); Double num = Double.parseDouble(part[0]); // 指定hr地区格式化实例 NumberFormat hrNumberFormat = NumberFormat.getInstance(Locale.forLanguageTag("hr")); return hrNumberFormat.format(num); } }
可选扩展
- 如果需要连同货币符号按hr地区规则展示,可将
NumberFormat.getInstance替换为NumberFormat.getCurrencyInstance,传入相同的hr Locale即可,输出会自动适配当地货币展示规范 - 原代码return行末尾多写了一个冗余分号,上述代码已做清理
内容的提问来源于stack exchange,提问作者Hrvoje T
相关产品推荐
相关产品推荐

