JFormattedTextField输入小数时小数部分被移除,如何修复使其支持小数输入?
JFormattedTextField小数输入截断问题解决方案
出现该问题的核心原因是NumberFormatter默认未指定浮点值类型,会优先将输入解析为整数类型,直接丢弃小数部分。
修复步骤
- 给
NumberFormatter显式指定值类型为浮点型(Double.class),如果是金额场景推荐用高精度的BigDecimal.class - 将最小值约束的入参改为对应浮点类型,避免整数约束影响解析
修复后代码(Double版本)
DecimalFormat decimalFormat = new DecimalFormat("#,##0.00"); NumberFormatter currencyFormatter = new NumberFormatter(decimalFormat); // 显式指定值类型为Double,保留小数 currencyFormatter.setValueClass(Double.class); // 最小值改为浮点型0.0,匹配值类型 currencyFormatter.setMinimum(0.0); JFormattedTextField AmountField = new JFormattedTextField(currencyFormatter);
高精度场景优化(金额推荐用BigDecimal)
如果需要避免浮点运算精度丢失,可调整为BigDecimal类型:
DecimalFormat decimalFormat = new DecimalFormat("#,##0.00"); // 开启DecimalFormat解析为BigDecimal decimalFormat.setParseBigDecimal(true); NumberFormatter currencyFormatter = new NumberFormatter(decimalFormat); currencyFormatter.setValueClass(BigDecimal.class); currencyFormatter.setMinimum(BigDecimal.ZERO); JFormattedTextField AmountField = new JFormattedTextField(currencyFormatter);
内容的提问来源于stack exchange,提问作者Bu Saeed
相关产品推荐
相关产品推荐

