Java 11 如何将数字格式化为捷克克朗# ###,## Kč的标准展示格式
问题根因
你原写法的核心错误是对DecimalFormat模式字符串的规则理解有误:
- 模式中的
,是分组分隔符的占位标记,.是小数分隔符的占位标记,二者本身不代表最终输出的字符,实际输出的分隔符样式由DecimalFormatSymbols的本地化配置决定 - 你直接把空格、逗号硬编码在模式中会被解析为错误的分组规则,同时默认使用当前系统Locale的分隔符配置,和捷克克朗的展示要求不匹配,因此输出了错位的结果。
正确实现方案
方案1:使用捷克地区内置货币格式化(推荐)
Java已经内置了捷克地区的货币格式化规则,直接指定cs_CZLocale获取货币格式实例即可,不需要手动编写模式:
import java.text.NumberFormat; import java.util.Locale; public class CzkFormatTest { public static void main(String[] args) { // 构造捷克地区Locale Locale czLocale = new Locale("cs", "CZ"); NumberFormat czCurrencyFormat = NumberFormat.getCurrencyInstance(czLocale); // 格式化数值 double amount = Double.parseDouble("50427.1"); System.out.println(czCurrencyFormat.format(amount)); } }
运行后直接输出50 427,10 Kč,完全符合要求。
方案2:自定义格式化符号(适配特殊定制需求)
如果后续需要调整格式规则,也可以手动配置DecimalFormat的分隔符规则:
import java.text.DecimalFormat; import java.text.DecimalFormatSymbols; import java.util.Locale; public class CzkFormatTest { public static void main(String[] args) { // 自定义格式化符号 DecimalFormatSymbols czSymbols = new DecimalFormatSymbols(Locale.forLanguageTag("cs-CZ")); czSymbols.setGroupingSeparator(' '); // 分组分隔符用空格 czSymbols.setDecimalSeparator(','); // 小数分隔符用逗号 // 构造格式化器,模式中用标准的,和.作为占位符即可 DecimalFormat df = new DecimalFormat("#,##0.00 Kč", czSymbols); // 格式化数值 double amount = Double.parseDouble("50427.1"); System.out.println(df.format(amount)); } }
补充提示:生产环境处理货币金额时,推荐使用BigDecimal替代Double存储数值,避免浮点运算导致的精度丢失问题。
内容的提问来源于stack exchange,提问作者SyAu
相关产品推荐
相关产品推荐

