为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

30秒到达战场 2019-01-17 19:49:46
问题描述 用的是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(); }
查看完整描述

1 回答

  • 1 回答
  • 0 关注
  • 680 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信