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

Android Java开发计算器应用无法输入小数点和逗号问题咨询

问题出现的常见原因

  • 布局文件中EditText的inputType属性配置错误:最常见的是给输入框设置了inputType="number",该配置默认只允许输入0-9的整数,会直接禁用小数点、逗号等符号。
  • 若配置的是inputType="numberDecimal",部分系统原生键盘默认仅支持小数点作为小数分隔符,不支持逗号,需要额外配置分隔符规则才能正常输入。
  • 自行实现的InputFilter输入过滤器限制了可输入字符范围,不小心将小数点、逗号排除在了允许输入的字符集外。
  • 系统键盘的语种适配问题:部分小语种键盘默认的小数分隔符和预期符号不匹配,导致无法触发对应符号的输入。

对应修复方案

  1. 先修改布局文件中对应EditText的inputType属性,替换为允许小数输入的配置:
<EditText
    android:id="@+id/txtBirinciSayi"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:inputType="numberDecimal|numberSigned" />
  1. 如果需要同时支持逗号和小数点输入,可以给EditText添加自定义InputFilter:
InputFilter decimalFilter = new InputFilter() {
    @Override
    public CharSequence filter(CharSequence source, int start, int end, Spanned dest, int dstart, int dend) {
        String allowedChars = "0123456789.,";
        for (int i = start; i < end; i++) {
            if (!allowedChars.contains(String.valueOf(source.charAt(i)))) {
                return "";
            }
            // 限制只能存在一个小数分隔符
            char c = source.charAt(i);
            if (c == '.' || c == ',') {
                if (dest.toString().contains(".") || dest.toString().contains(",")) {
                    return "";
                }
            }
        }
        return null;
    }
};
// 给两个输入框设置过滤器
birincisayi.setFilters(new InputFilter[]{decimalFilter});
ikincisayi.setFilters(new InputFilter[]{decimalFilter});
  1. 解析输入内容时统一分隔符格式,避免Double.parseDouble抛出格式错误:
// 先把逗号替换为小数点再做解析
double sayi1 = Double.parseDouble(birincisayi.getText().toString().replace(',', '.'));
double sayi2 = Double.parseDouble(ikincisayi.getText().toString().replace(',', '.'));

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.26 01:36:06