You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Android中DecimalFormatSymbols获取分隔符返回',44',如何修正并适配欧洲地区?

解决Android EditText欧洲地区小数点分隔符问题

我来帮你搞定这个EditText的小数点分隔符问题!首先得澄清一个你可能误解的点:你看到的',44'并不是方法返回了奇怪的字符串——getDecimalSeparator()返回的是单个char类型的分隔符,调试时显示的,44其实是逗号字符(ASCII码值为44)的调试表现,实际它就是单个的,,你可以用Log.d("Separator", String.valueOf(separator))打印出来验证,肯定是纯逗号。

不过你的需求是「仅欧洲地区使用','替代'.'」,所以我们需要在代码里做区域判断,确保只有欧洲区域才切换分隔符,同时正确配置DigitsKeyListener。下面是修正后的完整方案:

步骤1:定义欧洲国家的ISO代码列表

先整理一份你需要覆盖的欧洲国家ISO代码(可以根据业务需求补充或调整):

private static final Set<String> EUROPEAN_COUNTRIES = new HashSet<>(Arrays.asList(
        "AT", "BE", "BG", "HR", "CY", "CZ", "DK", "EE", "FI", "FR", "DE", "GR", "HU",
        "IE", "IT", "LV", "LT", "LU", "MT", "NL", "PL", "PT", "RO", "SK", "SI", "ES", "SE", "CH", "GB"
));

步骤2:根据区域获取正确的分隔符

通过当前系统Locale判断是否属于欧洲区域,再获取对应的分隔符:

// 获取当前系统的区域设置
Locale currentLocale = Locale.getDefault();
char decimalSeparator = '.'; // 默认使用英文小数点

// 判断当前区域是否为欧洲国家
if (EUROPEAN_COUNTRIES.contains(currentLocale.getCountry())) {
    // 获取对应区域的小数点分隔符
    decimalSeparator = DecimalFormatSymbols.getInstance(currentLocale).getDecimalSeparator();
}

// 给EditText设置DigitsKeyListener
mWeightEditText.setKeyListener(DigitsKeyListener.getInstance("0123456789" + decimalSeparator));

额外说明

  • 关于调试时的,44:这是IDE调试工具对char类型的显示方式,把字符和它的ASCII码值一起展示了,实际变量里存储的就是单个逗号字符,完全可以正常使用。
  • 欧洲国家列表:如果你的业务需要覆盖更多欧洲国家,可以在集合里补充对应的ISO 3166-1两位国家代码。
  • 兼容性:这个方案适配Android全版本,因为DecimalFormatSymbols和Locale的相关方法都是API 1就存在的。

内容的提问来源于stack exchange,提问作者Jayasree

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.14 08:57:35