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

求助:简易计算器应用输入小数时崩溃,附加法功能代码

解决计算器输入小数崩溃的问题

嘿,我一眼就揪出问题所在啦!你当前的代码用了Long.parseLong()来解析输入——这个方法只能处理纯整数格式的字符串,一旦用户输入小数(比如"3.14"),它就会抛出NumberFormatException,直接导致应用崩溃。

核心问题拆解

Long是Java的整数类型,对应的parseLong()方法要求输入字符串必须是合法的整数(不能包含小数点、字母等非整数字符)。当输入小数时,这个方法无法完成解析,又没有做异常处理,自然会让应用直接崩溃。

可行解决方案:改用支持小数的类型 + 异常捕获

这里提供两种修改方案,你可以根据需求选:

方案1:用Double快速实现(适合普通计算场景)

Double类型支持小数解析,同时我们加上try-catch块捕获无效输入的异常,既避免崩溃,还能给用户友好提示:

public void add(View v) {
    EditText e1 = (EditText) findViewById(R.id.et1);
    EditText e2 = (EditText) findViewById(R.id.et2);
    TextView tv = (TextView) findViewById(R.id.tv);
    
    try {
        // 替换Long为Double,支持小数解析
        double num1 = Double.parseDouble(e1.getText().toString());
        double num2 = Double.parseDouble(e2.getText().toString());
        double result = num1 + num2;
        // 可选:格式化结果,比如保留两位小数
        tv.setText(String.format("%.2f", result));
    } catch (NumberFormatException e) {
        // 输入无效时给用户提示
        tv.setText("请输入有效的数字!");
    }
}

方案2:用BigDecimal处理精度(适合对精度要求高的场景,比如金额计算)

如果你的计算器需要避免Double的精度丢失问题(比如0.1+0.2不等于0.3的情况),可以用BigDecimal:

public void add(View v) {
    EditText e1 = (EditText) findViewById(R.id.et1);
    EditText e2 = (EditText) findViewById(R.id.et2);
    TextView tv = (TextView) findViewById(R.id.tv);
    
    try {
        BigDecimal num1 = new BigDecimal(e1.getText().toString());
        BigDecimal num2 = new BigDecimal(e2.getText().toString());
        BigDecimal result = num1.add(num2);
        // 用toPlainString避免出现科学计数法
        tv.setText(result.toPlainString());
    } catch (NumberFormatException e) {
        tv.setText("请输入有效的数字!");
    }
}

额外优化建议

  • 给EditText设置输入类型限制:添加android:inputType="numberDecimal",让用户只能输入数字和小数点,从源头减少无效输入
  • 提前判断空输入:在try块里先检查输入是否为空,比如if(e1.getText().toString().isEmpty()),可以更精准地提示用户

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.21 03:35:12