猿问

我的这个程序BigDecimal 为什么没有用科学计数法显示 3588966822845?

问题描述

用的是toString();

你期待的结果是什么?实际看到的错误信息又是什么?

我期待是用科学计数法显示 结果是直接显示

问题出现的环境背景及自己尝试过哪些方法

我正在制作安卓计算器

相关代码

// 请把代码文本粘贴到下方(请勿用图片代替代码)

List<Button> list = new ArrayList<Button>();//按钮
List<Integer> thisnum= new ArrayList<Integer>();//临时数字
List<Character> stack = new ArrayList<Character>();//表达式
Stack<Character> SOP = new Stack<Character>();//临时存储运算符和分界符(
List<String> L = new ArrayList<String>();//后缀表达式
Stack<BigDecimal> scalc = new Stack<BigDecimal>();//后缀表达式运算栈
boolean ClearA = false;

        case R.id.buttonA://等于号
            BigDecimal re;
            ClearA=true;
            //STACKcompress() 变为后缀表示式
            if(STACKcompress()){//是否正确运行
               re = suffixToResult();//运算
         if(!textView1.getText().equals("错误")){
             textView.setText(re.toString());
                }
            }else if(stack.size()==1){  //只有一个元素
                Character character = stack.get(0);
                if(character!='-'){
                    textView1.setText("错误");
                    stack.clear();
                }else{
                    textView.setText('-');
                }
            }
            return;

private boolean STACKcompress() {
//将参数中缀表达式expression转为后缀表达式存放在L中,返回L

      L.clear();
      SOP.clear();
      Log.d("stack",stack.toString());
      int dian =0;  //
      boolean  dia=false;    //
    for (int i = 0; i < stack.size(); i++)        //对表达式中的每一个元素
    {
        char element = stack.get(i);
        if ('0' <= element && element <= '9') {
            if(dia){
                dian++;
            }
            thisnum.add(element-'0');

            Log.d("(int) element", String.valueOf(element-'0'));
            if(i +1==stack.size()){
                BigDecimal ten=BigDecimal.valueOf(10);
                BigDecimal zxc= BigDecimal.valueOf(0);
                for(int a=0;a<thisnum.size();a++){
                    zxc=zxc.multiply(ten);
                    zxc=zxc.add(BigDecimal.valueOf(thisnum.get(a)));
                }
                if(dia){
                    for(int a=0;a<dian;a++){
                        zxc=zxc.divide(ten);
                    }
                    dia=false;
                    dian=0;
                }
                L.add(""+zxc);
                thisnum.clear();
                Log.d("String(zxc) i+1 ", ""+zxc);
            }
        } else if (SwitchOperator(element)) {
            if(stack.size()==1&&element!='-'){
                Log.d("element in if",""+element);
                return false;
            }
            if(!thisnum.isEmpty()){
                BigDecimal ten=BigDecimal.valueOf(10);
                BigDecimal zxc= BigDecimal.valueOf(0);
                for(int a=0;a<thisnum.size();a++){
                    zxc=zxc.multiply(ten);
                    zxc=zxc.add(BigDecimal.valueOf(thisnum.get(a)));
                }
                if(dia){
                    for(int a=0;a<dian;a++){
                        zxc=zxc.divide(ten);
                    }
                    dia=false;
                    dian=0;
                }
                L.add(""+zxc);
                thisnum.clear();
                Log.d("String(zxc) i+1 ", ""+zxc);
            }
            while(SopTureOrFlase(element)) {
                L.add(""+SOP.pop());
            }
            if(i +1!=stack.size()) {
                SOP.push(element);
            }else if(stack.size()!=1){
                return  false;
            }

        }else if(element=='.'){
            dia=true;
        }else  if(element=='%'){
            if(!thisnum.isEmpty()) {
                BigDecimal ten=BigDecimal.valueOf(10);
                BigDecimal zxc = BigDecimal.valueOf(0);
                for (int a = 0; a < thisnum.size(); a++) {
                    zxc=zxc.multiply(ten);
                    zxc=zxc.add(BigDecimal.valueOf(thisnum.get(a)));
                }
                Log.d("thisnum", thisnum.toString());
                thisnum.clear();
                zxc=zxc.divide(BigDecimal.valueOf(100));
                Log.d("zxc", "" + zxc);
                L.add("" + zxc);
            }
        } else{
            textView.setText("警告 :不在按键中的字符出现");
            Log.e("警告","不在按键中的字符出现");
            this.onStop();
        }
    }
        while (!SOP.isEmpty())      //将sop栈中剩余的所有元素弹出,追加到L后
        {
            L.add(""+SOP.pop());

        }
  return true;
}

private BigDecimal suffixToResult() { //运算后缀表达式
    BigDecimal temp_value ;

    for (int i = 0; i < L.size(); i++) {
       String element1 = L.get(i);
       Log.d("L",L.toString());
        char element = element1.charAt(0);//获取字符串的第一个字符
        Log.d("String.valueOf(BigDecimal.valueOf(element))", String.valueOf(BigDecimal.valueOf(element)));
       if (SwitchOperator(element)) {
           Log.d("是操作符", String.valueOf(element));
            //从栈中弹出2个操作数 num1 和 num2 。注意:后弹出的num2是第一操作数,num1是第二操作数 。
            //因为这里考虑的都是二元运算符,因此需要弹2个元素出来进行运算。
           try{
               BigDecimal num1 = scalc.pop();
               BigDecimal num2 = scalc.pop();

               switch (element) {
                   case '+':
                       temp_value = num2.add(num1) ;
                       break;
                   case '-':
                       temp_value = num2.subtract(num1) ;
                       break;
                   case '*':
                       temp_value = num2.multiply(num1);
                       break;
                   case '/':
                           temp_value = num2.divide(num1) ;
                       break;
                   default:
                       temp_value = BigDecimal .valueOf(999);
                       break;
               }
               //将temp_value压栈
               TextView1("");
               scalc.push(temp_value);
           }catch (EmptyStackException e) {
              TextView1("错误");
              return BigDecimal .valueOf(-1);
           }
            //使用element代表的运算符完成 num2 和 num1 的计算,产生临时结果 temp_value
        }  else {
           BigDecimal bd = new BigDecimal(element1);
          Log.d("bd", bd.toString()) ;
       scalc.push(bd);
     }
    }Log.d("scalc",scalc.toString());
     BigDecimal x=scalc.pop();
    Log.d("x",x.toString());
    return x.stripTrailingZeros();
}

30秒到达战场
浏览 681回答 1
1回答
随时随地看视频慕课网APP

相关分类

Java
我要回答