Android Studio计算器APP小数删除功能异常问题求助
修复计算器删除功能的小数处理问题
嘿,我一眼就看出你代码里的问题啦!你现在的删除逻辑因为把输入文本转成Double再转回字符串,丢失了原始输入的格式信息,才导致删到12.之后就没法继续操作。咱们直接操作原始字符串就能解决这个bug。
问题出在哪?
看你这段代码:
btnclear.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { Value1 = Double.parseDouble(edttext.getText() + ""); String s = Value1 + ""; String Res = ""; for (int i = 0; i < s.length() - 1; i++) { Res += s.charAt(i); } if (Res.equals("")) edttext.setText("0"); else edttext.setText(null); edttext.setText(Res); } });
当EditText显示12.时,Double.parseDouble("12.")会自动把它转成12.0,对应的字符串s就是"12.0"。这时候你取前3个字符(s.length()-1是3),得到的还是"12.",设置回EditText后等于没变化,自然没法继续删成12或者1。
直接修复的代码
咱们跳过Double转换这一步,直接操作EditText的原始字符串,保留输入的真实状态:
btnclear.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { // 获取当前输入框的文本,先去掉首尾空格 String currentText = edttext.getText() != null ? edttext.getText().toString().trim() : ""; // 如果文本是空的或者只有"0",直接保持"0"不变 if (currentText.isEmpty() || currentText.equals("0")) { edttext.setText("0"); return; } // 截取原始字符串的前length-1位,实现删除最后一个字符 String newText = currentText.substring(0, currentText.length() - 1); // 如果截取后为空,设置为"0",否则设置为新文本 edttext.setText(newText.isEmpty() ? "0" : newText); } });
测试一下效果
修改后,删除流程会完全符合预期:
12.12→ 点删除 →12.112.1→ 点删除 →12.12.→ 点删除 →1212→ 点删除 →11→ 点删除 →0
额外小优化(可选)
如果你想让体验更顺滑,可以加个小逻辑:比如当删除后文本是.0这种情况,自动调整为0;或者当文本是0时,点击删除不做任何操作(避免反复设置0)。
内容的提问来源于stack exchange,提问作者Sümeyye Aydın




