求助:简易计算器应用输入小数时崩溃,附加法功能代码
解决计算器输入小数崩溃的问题
嘿,我一眼就揪出问题所在啦!你当前的代码用了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
相关产品推荐
相关产品推荐

