⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 calculator.java

📁 一款模拟windows的计算器
💻 JAVA
📖 第 1 页 / 共 5 页
字号:
						int explength=displayField.getText().length()-displayField.getText().indexOf("+")-1;
						if(explength==1){
							displayField.setText(displayField.getText().substring(0,displayField.getText().length()-1)+"0");
						}
						else{
							displayField.setText(displayField.getText().substring(0,displayField.getText().length()-1));
						}
					}
					return;
				}


				if(rbBinary.isSelected()||rbHexadecimal.isSelected()||rbOctal.isSelected()){

					if(displayStr.equals("0")||isOperandBegin==true){
						return;
					}
					else{
						if(displayStr.length()==1){
							displayField.setText("0");
							isOperandBegin=true;
							return;
						}
						displayField.setText(displayStr.substring(0,displayStr.length()-1));
						return;
					}
				}

				if(isDot==true){
					if(displayStr.endsWith(".")){
						isDot=false;
					}
					else{
						displayField.setText(displayStr.substring(0,displayStr.length()-1));
					}
				}
				else{
					try {

						//基于格式的解析
						DecimalFormat df=new DecimalFormat();
						df.setParseBigDecimal(true);
						Object obj= null;
						obj = df.parse(displayStr);

						StringBuffer sb=new StringBuffer(obj.toString());

						if(sb.toString().charAt(0)=='-'){
							if(sb.toString().length()==2){
								displayField.setText("0.");
								return;
							}
						}
						else{
							if(sb.toString().length()==1){
								displayField.setText("0.");
								return;
							}
						}

						sb.deleteCharAt(sb.toString().length()-1);

						BigDecimal bd=new BigDecimal(sb.toString());

						displayField.setText(decimalismFormat.format(bd));

					}
					catch (ParseException pe) {
						pe.printStackTrace();
					}
				}

			}
		});


		//创建CE按钮
		btnCE=new JButton("CE");
		btnCE.setForeground(Color.RED);
		btnCE.setMargin(new Insets(0,1,2,1));
		container.add(btnCE);
		btnCE.addActionListener(new ActionListener(){
			public void actionPerformed(ActionEvent arg0) {
				if(isError==true){
					if(rbHexadecimal.isSelected()||rbOctal.isSelected()||rbBinary.isSelected()){
						displayField.setText("0");
					}else{
						displayField.setText("0.");
					}
					isDot=false;
					isError=false;
					isOperandBegin=true;
					isFirstOprator=false;
					isFirstEqual=false;
					isFirstPercent=true;
					isFirstReciprocal=true;
					firstOperand="0";
					secondOperand="0";
					result="0";
				}
				else{
					if(rbHexadecimal.isSelected()||rbOctal.isSelected()||rbBinary.isSelected()){
						displayField.setText("0");
					}else{
						displayField.setText("0.");
					}
					isDot=false;
					isOperandBegin=true;
					isError=false;
				}

			}
		});


		//创建C按钮
		btnClear=new JButton("C");
		btnClear.setForeground(Color.RED);
		btnClear.setMargin(new Insets(0,1,2,1));
		container.add(btnClear);
		btnClear.addActionListener(new ActionListener(){
			public void actionPerformed(ActionEvent arg0) {
				resetAllVar();
			}
		});


		//创建Sta按钮
		btnSta=new JButton("Sta");
		btnSta.setForeground(Color.BLUE);
		btnSta.setMargin(new Insets(0,1,2,1));
		container.add(btnSta);
		btnSta.addActionListener(new ActionListener(){

			public void actionPerformed(ActionEvent e) {
				if(dlgStatistic.isVisible()==true){
					return;
				}
				else{
					btnAve.setEnabled(true);
					btnSum.setEnabled(true);
					btnS.setEnabled(true);
					btnDat.setEnabled(true);
					dlgStatistic.setVisible(true);
				}
			}

		});


		//创建Ave按钮
		btnAve=new JButton("Ave");
		btnAve.setForeground(Color.BLUE);
		btnAve.setMargin(new Insets(0,1,2,1));
		container.add(btnAve);
		btnAve.addActionListener(new ActionListener(){

			public void actionPerformed(ActionEvent arg0) {
				if(vecListData.size()>0){
					if(cbInv.isSelected()==true){
						displayField.setText(ScienceArith.invave(vecListData,vecListData.size())+"");
						cbInv.setSelected(false);
					}else{
						displayField.setText(ScienceArith.ave(vecListData,vecListData.size())+"");
					}
					isOperandBegin=true;
					isDot=false;
				}
			}

		});


		//创建Sum按钮
		btnSum=new JButton("Sum");
		btnSum.setForeground(Color.BLUE);
		btnSum.setMargin(new Insets(0,1,2,1));
		container.add(btnSum);
		btnSum.addActionListener(new ActionListener(){
			public void actionPerformed(ActionEvent arg0) {
				if(vecListData.size()>0){
					if(cbInv.isSelected()==true){
						displayField.setText(ScienceArith.invsum(vecListData,vecListData.size())+"");
						cbInv.setSelected(false);
					}else{
						displayField.setText(ScienceArith.sum(vecListData,vecListData.size())+"");
					}
					isOperandBegin=true;
					isDot=false;
				}
			}
		});


		//创建S按钮
		btnS=new JButton("s");
		btnS.setForeground(Color.BLUE);
		btnS.setMargin(new Insets(0,1,2,1));
		container.add(btnS);
		btnS.addActionListener(new ActionListener(){
			public void actionPerformed(ActionEvent arg0) {
				if(vecListData.size()>0){
					if(cbInv.isSelected()==true){
						displayField.setText(ScienceArith.invstddeviation(vecListData,vecListData.size())+"");
						cbInv.setSelected(false);
					}else{
						displayField.setText(ScienceArith.stddeviation(vecListData,vecListData.size())+"");
					}
					isOperandBegin=true;
					isDot=false;
				}
			}
		});

		//创建Dat按钮
		btnDat=new JButton("Dat");
		btnDat.setForeground(Color.BLUE);
		btnDat.setMargin(new Insets(0,1,2,1));
		container.add(btnDat);
		btnDat.addActionListener(new ActionListener(){
			public void actionPerformed(ActionEvent e) {
				String displayStr=displayField.getText();
				displayStr=displayStr.replace(",","");
				vecListData.addElement(displayStr);
				datalist.setListData(vecListData);
				datalist.setSelectedIndex(vecListData.lastIndexOf(displayStr));
				lblDataCount.setText("n="+vecListData.size());
				isOperandBegin=true;
				isDot=false;
			}
		});


		//创建FE按钮
		btnFE=new JButton("F-E");
		btnFE.setForeground(Color.MAGENTA);
		btnFE.setMargin(new Insets(0,1,2,1));
		container.add(btnFE);
		btnFE.addActionListener(new ActionListener(){
			public void actionPerformed(ActionEvent arg0) {
				if(isError){
					return;
				}
				showFE();
			}
		});


		//创建Dms按钮
		btnDms=new JButton("dms");
		btnDms.setForeground(Color.MAGENTA);
		btnDms.setMargin(new Insets(0,1,2,1));
		container.add(btnDms);
		btnDms.addActionListener(new ActionListener(){
			public void actionPerformed(ActionEvent arg0) {
				if(isError){
					return;
				}
				DecimalFormat df=new DecimalFormat();
				df.setMaximumFractionDigits(10);
				String str=displayField.getText();
				str=str.replace(",","");
				double num=Double.parseDouble(str);
				if(cbInv.isSelected()){
					displayField.setText(df.format(ScienceArith.invdms(num)));
					cbInv.setSelected(false);
				}else{
					displayField.setText(df.format(ScienceArith.dms(num)));
				}
				isOperandBegin=true;
				isOperandBegin=false;
			}
		});

		//创建Sin按钮
		btnSin=new JButton("sin");
		btnSin.setForeground(Color.MAGENTA);
		btnSin.setMargin(new Insets(0,1,2,1));
		container.add(btnSin);
		btnSin.addActionListener(new ActionListener(){
			public void actionPerformed(ActionEvent arg0) {
				if(isError==true){
					return;
				}
				double num=Double.parseDouble(displayField.getText().replace(",",""));//弧度表示

				if(cbInv.isSelected()&&cbHyp.isSelected()){
					//求asinh(反双曲函数
					displayField.setText(decimalismFormat.format(new BigDecimal(ScienceArith.asinh(num))));
					cbHyp.setSelected(false);
					cbInv.setSelected(false);
				}
				else if(!cbInv.isSelected()&&cbHyp.isSelected()){
					//求sinh(双曲函数)
					displayField.setText(decimalismFormat.format(new BigDecimal(Math.sinh(num))));
					cbHyp.setSelected(false);
				}
				else if(cbInv.isSelected()&&!cbHyp.isSelected()){
					//求asin(反函数)
					if(num>1||num<-1){
						displayField.setText("函数输入无效。");
						isError=true;
						return;
					}
					else{
						if(rbAngle.isSelected()){
							num=Math.asin(num);
							displayField.setText(ScienceArith.rad_to_deg(num)+"");
						}else if(rbGrads.isSelected()){
							num=Math.asin(num);
							displayField.setText(ScienceArith.rad_to_grad(num)+"");
						}else{
							displayField.setText(Math.asin(num)+"");
						}
					}
					cbInv.setSelected(false);
				}
				else if(!cbInv.isSelected()&&!cbHyp.isSelected()){
					//直接求sin(三角函数)
					DecimalFormat df=new DecimalFormat();
					df.setMaximumFractionDigits(15);
					df.setDecimalSeparatorAlwaysShown(true);
					if(rbAngle.isSelected()){
						num=ScienceArith.deg_to_rad(num);
						displayField.setText(Math.sin(num)+"");
					}else if(rbGrads.isSelected()){
						num=ScienceArith.grad_to_rad(num);
						displayField.setText(Math.sin(num)+"");
					}else{
						displayField.setText(df.format(Math.sin(num)));
					}
				}

				isOperandBegin=true;
				isDot=false;
			}

		});


		//创建Cos按钮
		btnCos=new JButton("cos");
		btnCos.setForeground(Color.MAGENTA);
		btnCos.setMargin(new Insets(0,1,2,1));
		container.add(btnCos);
		btnCos.addActionListener(new ActionListener(){
			public void actionPerformed(ActionEvent arg0) {
				if(isError==true){
					return;
				}
				double num=Double.parseDouble(displayField.getText().replace(",",""));//弧度表示

				if(cbInv.isSelected()&&cbHyp.isSelected()){
					//求acosh(反双曲余弦函数
					//其定义域为:[1,+∞);
					if(num<1){
						displayField.setText("函数输入无效。");
						isError=true;
						return;
					}
					displayField.setText(decimalismFormat.format(new BigDecimal(ScienceArith.acosh(num))));
					cbHyp.setSelected(false);
					cbInv.setSelected(false);
				}
				else if(!cbInv.isSelected()&&cbHyp.isSelected()){
					//求cosh(双曲余弦函数)
					//定义域为:(-∞,+∞);
					displayField.setText(decimalismFormat.format(new BigDecimal(Math.cosh(num))));
					cbHyp.setSelected(false);
				}
				else if(cbInv.isSelected()&&!cbHyp.isSelected()){
					//求acos(反余弦函数)
					//定义域为:[-1,1];
					if(num>1||num<-1){
						displayField.setText("函数输入无效。");
						isError=true;
						return;
					}
					else{
						if(rbAngle.isSelected()){
							num=Math.acos(num);
							displayField.setText(ScienceArith.rad_to_deg(num)+"");
						}else if(rbGrads.isSelected()){
							num=Math.acos(num);
							displayField.setText(ScienceArith.rad_to_grad(num)+"");
						}else{
							displayField.setText(Math.acos(num)+"");
						}
					}
					cbInv.setSelected(false);
				}
				else if(!cbInv.isSelected()&&!cbHyp.isSelected()){
					//求cos(三角余弦函数)
					//定义域为:(-∞,+∞);
					DecimalFormat df=new DecimalFormat();
					df.setMaximumFractionDigits(15);
					df.setDecimalSeparatorAlwaysShown(true);
					if(rbAngle.isSelected()){
						num=ScienceArith.deg_to_rad(num);
						displayField.setText(Math.cos(num)+"");
					}else if(rbGrads.isSelected()){
						num=ScienceArith.grad_to_rad(num);
						displayField.setText(Math.cos(num)+"");
					}else{
						displayField.setText(df.format(Math.cos(num)));
					}
				}

				isOperandBegin=true;
				isDot=false;
			}

		});

		//创建Tan按钮
		btnTan=new JButton("tan");
		btnTan.setForeground(Color.MAGENTA);
		btnTan.setMargin(new Insets(0,1,2,1));
		container.add(btnTan);
		btnTan.addActionListener(new ActionListener(){
			public void actionPerformed(ActionEvent arg0) {
				if(isError==true){
					return;
				}
				double num=Double.parseDouble(displayField.getText().replace(",",""));//弧度表示

				if(cbInv.isSelected()&&cbHyp.isSelected()){
					//求atanh(反双曲正切函数)
					//定义域:(-1,+1);
					if(num>1||num<-1){
						displayField.setText("函数输入无效。");
						isError=true;
						return;
					}
					if(num==1){
						displayField.setText("除数不能为零。");
						isError=true;
						return;
					}

					displayField.setText(decimalismFormat.format(new BigDecimal(ScienceArith.atanh(num))));
					cbHyp.setSelected(false);
					cbInv.setSelected(false);
				}
				else if(!cbInv.isSelected()&&cbHyp.isSelected()){
					//求tanh(双曲正切函数)
					//定义域为:(-∞,+∞);
					displayField.setText(decimalismFormat.format(new BigDecimal(Math.tanh(num))));
					cbHyp.setSelected(false);
				}
				else if(cbInv.isSelected()&&!cbHyp.isSelected()){
					//求atan(反正切函数)
					//定义域(-∞,+∞)
					if(rbAngle.isSelected()){
						num=Math.atan(num);
						displayField.setText(ScienceArith.rad_to_deg(num)+"");
					}else if(rbGrads.isSelected()){
						num=Math.atan(num);
						displayField.setText(ScienceArith.rad_to_grad(num)+"");
					}else{
						displayField.setText(Math.atan(num)+"");
					}

					cbInv.setSelected(false);
				}
				else if(!cbInv.isSelected()&&!cbHyp.isSelected()){
					//直接求tan(三角函数)

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -