android中自带计算器按.格式显示错误问题

这篇博客主要讨论了在Android开发过程中遇到的自带计算器显示格式错误的问题,特别是涉及小数点显示的问题。通过修改CalculatorExpressionBuilder.java文件中的replace()方法,检查并修正了连续输入小数点或者在非数字后输入小数点的情况,确保计算器的正确显示。
部署运行你感兴趣的模型镜像

在开发中遇到的关于android手机自带计算器显示格式纠正问题

此问题修改的文件路径:alps/packages/apps/Calculator/src/com/android/calculator2/CalculatorExpressionBuilder.java

replace()方法中做修改:

在switch循环后加入如下代码

        if(expr.length()>0){
        char mText=expr.charAt(expr.length()-1);
        Boolean mBoolean =false;
        if(!(mText==('0')||mText==('1')||mText==('2')||
            mText==('3')||mText==('4')||mText==('5')||
            mText==('6')||mText==('7')||mText==('8')||
            mText==('9'))){
            mBoolean=true;
        }
        android.util.Log.i("CalculatorExpressionBuilder","mBoolean="+mBoolean);
        if(appendExpr.equals(".")&&mBoolean){
            appendExpr="0.";
        }
          }else if(expr.length()==0&&appendExpr.equals(".")){
             appendExpr="0.";
          }
        }



此方法完整的代码所示

    @Override
    public SpannableStringBuilder replace(int start, int end, CharSequence tb, int tbstart,
            int tbend) {
        if (start != length() || end != length()) {
            mIsEdited = true;
            return super.replace(start, end, tb, tbstart, tbend);
        }

        String appendExpr =
                mTokenizer.getNormalizedExpression(tb.subSequence(tbstart, tbend).toString());
        if (appendExpr.length() == 1) {
            final String expr = mTokenizer.getNormalizedExpression(toString());
            // SPRD 515934 enter all numbers and operators, calculator crash
            final int len = expr.length();
            switch (appendExpr.charAt(0)) {
                case '.':
                    // don't allow two decimals in the same number
                    final int index = expr.lastIndexOf('.');
                    // SPRD: 544823 modify for StringIndexOutOfBoundsException
                    if (index != -1 && index < start && TextUtils.isDigitsOnly(expr.substring(index + 1, start))) {
                        appendExpr = "";
                    }
                    break;
                case '+':
                case '*':
                case '/':
                    // don't allow leading operator
                    if (start == 0) {
                        appendExpr = "";
                        break;
                    }
                    /*SPRD: Bug 487833 don't allow leading operator change from - to * or / @{ */
                    if (start == 1 && expr.equals("-")) {
                        appendExpr = "";
                        break;
                    }
                    /* @} */
                    /* SPRD 515934 enter all numbers and operators, calculator crash @{ */
                    Log.d("Calculator", "len: " + len + " start: " + start+" expr: "+expr);
                    if (start > len) {
                        break;
                    }
                    /* @} */
                    // don't allow multiple successive operators
                    while (start > 0 && "+-*/".indexOf(expr.charAt(start - 1)) != -1) {
                        --start;
                    }
                    // fall through
                case '-':
                    // don't allow -- or +-
                    // SPRD 515934 enter all numbers and operators,calculator crash
                    if ((start > 0) && (start <= len) && "+-".indexOf(expr.charAt(start - 1)) != -1) {
                        --start;
                    }

                    // mark as edited since operators can always be appended
                    mIsEdited = true;
                    break;
                default:
                    break;
            }
        if(expr.length()>0){
        char mText=expr.charAt(expr.length()-1);
        Boolean mBoolean =false;
        if(!(mText==('0')||mText==('1')||mText==('2')||
            mText==('3')||mText==('4')||mText==('5')||
            mText==('6')||mText==('7')||mText==('8')||
            mText==('9'))){
            mBoolean=true;
        }
        android.util.Log.i("CalculatorExpressionBuilder","mBoolean="+mBoolean);
        if(appendExpr.equals(".")&&mBoolean){
            appendExpr="0.";
        }
          }else if(expr.length()==0&&appendExpr.equals(".")){
             appendExpr="0.";
          }
        }

        // since this is the first edit replace the entire string
        if (!mIsEdited && appendExpr.length() > 0) {
            start = 0;
            mIsEdited = true;
        }

        appendExpr = mTokenizer.getLocalizedExpression(appendExpr);
        return super.replace(start, end, appendExpr, 0, appendExpr.length());
    }


您可能感兴趣的与本文相关的镜像

ACE-Step

ACE-Step

音乐合成
ACE-Step

ACE-Step是由中国团队阶跃星辰(StepFun)与ACE Studio联手打造的开源音乐生成模型。 它拥有3.5B参数量,支持快速高质量生成、强可控性和易于拓展的特点。 最厉害的是,它可以生成多种语言的歌曲,包括但不限于中文、英文、日文等19种语言

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值