You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

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.1
  • 12.1 → 点删除 → 12.
  • 12. → 点删除 → 12
  • 12 → 点删除 → 1
  • 1 → 点删除 → 0

额外小优化(可选)

如果你想让体验更顺滑,可以加个小逻辑:比如当删除后文本是.0这种情况,自动调整为0;或者当文本是0时,点击删除不做任何操作(避免反复设置0)。

内容的提问来源于stack exchange,提问作者Sümeyye Aydın

火山引擎 最新活动