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

📄 calculator.java

📁 一款模拟windows的计算器
💻 JAVA
📖 第 1 页 / 共 5 页
字号:
					DecimalFormat df=new DecimalFormat();
					df.setMaximumFractionDigits(15);
					df.setDecimalSeparatorAlwaysShown(true);
					if(rbAngle.isSelected()){
						//角度
						if((num-90)/90%2==0){
							//定义域不能为-90度或90度,周期为180度
							displayField.setText("函数输入无效。");
							isError=true;
							return;
						}
						num=ScienceArith.deg_to_rad(num);
						double number=Math.tan(num);
						displayField.setText(df.format(number));
						if(displayField.getText().equals("-0.")){
							displayField.setText("0.");
						}

					}else if(rbGrads.isSelected()){
						//梯度
						if((num*9/10-90)/90%2==0){
							//num*9/10是将梯度转换为角度再进行定义域判断
							//定义域不能为-90度或90度,周期为180度
							displayField.setText("函数输入无效。");
							isError=true;
							return;
						}
						num=ScienceArith.grad_to_rad(num);
						double number=Math.tan(num);
						displayField.setText(df.format(number));
						if(displayField.getText().equals("-0.")){
							displayField.setText("0.");
						}

					}else{
						//弧度
						if((num-(Math.PI/2))/(Math.PI/2)%2==0){
							//判断num是不是pi/2的奇数倍
							//定义域不能为-90度或90度,周期为180度
							displayField.setText("函数输入无效。");
							isError=true;
							return;
						}
						double number=Math.tan(num);
						displayField.setText(df.format(number));
						if(displayField.getText().equals("-0.")){
							displayField.setText("0.");
						}
					}
				}

				isOperandBegin=true;
				isDot=false;
			}
		});

		//创建LBracket按钮
		btnLBracket=new JButton("(");
		btnLBracket.setForeground(Color.MAGENTA);
		btnLBracket.setMargin(new Insets(0,1,2,1));
		container.add(btnLBracket);
		btnLBracket.addActionListener(new ActionListener(){
			public void actionPerformed(ActionEvent e) {
				if(isError){
					return;
				}
				setOperatorForScience(e);
			}
		});

		//创建RBracket
		btnRBracket=new JButton(")");
		btnRBracket.setForeground(Color.MAGENTA);
		btnRBracket.setMargin(new Insets(0,1,2,1));
		container.add(btnRBracket);
		btnRBracket.addActionListener(new ActionListener(){
			public void actionPerformed(ActionEvent e) {
				if(isError){
					return;
				}
				setOperatorForScience(e);
			}
		});

		//创建Exp按钮
		btnExp=new JButton("Exp");
		btnExp.setForeground(Color.MAGENTA);
		btnExp.setMargin(new Insets(0,1,2,1));
		container.add(btnExp);
		btnExp.addActionListener(new ActionListener(){
			public void actionPerformed(ActionEvent arg0) {
				if(isError==true||canExp==false){
					return;
				}
				String displayStr=displayField.getText();
				displayStr=displayStr.replace(",","");
				if(displayStr.indexOf("E+")==-1){
					displayField.setText(displayField.getText()+"E+0");
				}
				isExp=true;
			}
		});

		//创建XPowY按钮
		btnXPowY=new JButton("x^y");
		btnXPowY.setForeground(Color.MAGENTA);
		btnXPowY.setMargin(new Insets(0,1,2,1));
		container.add(btnXPowY);
		btnXPowY.addActionListener(new ActionListener(){
			public void actionPerformed(ActionEvent e) {
				if(isError){
					return;
				}
				setOperatorForScience(e);
			}
		});



		//创建XPow3按钮
		btnXPow3=new JButton("x^3");
		btnXPow3.setForeground(Color.MAGENTA);
		btnXPow3.setMargin(new Insets(0,1,2,1));
		container.add(btnXPow3);
		btnXPow3.addActionListener(new ActionListener(){
			public void actionPerformed(ActionEvent arg0) {
				if(isError){
					return;
				}
				String str=displayField.getText();
				str=str.replace(",","");
				double num=Double.parseDouble(str);

				if(cbInv.isSelected()){
					try{
						if(num>=0){
							decimalismFormat.setMaximumFractionDigits(30);
							displayField.setText(decimalismFormat.format(Math.cbrt(num)));
						}
						else{
							displayField.setText("函数输入无效。");
							isError=true;
						}
					}
					catch(NumberFormatException nfe){
					}
					cbInv.setSelected(false);
					return;
				}

				try{
					DecimalFormat df=new DecimalFormat();
					df.setDecimalSeparatorAlwaysShown(true);
					df.setMaximumFractionDigits(30);
					df.setMaximumIntegerDigits(32);

					BigDecimal bd=Arith.xpow3(str);

					int scalNeg=1;
					if(bd.toString().indexOf("E")!=-1){
						scalNeg=Integer.parseInt(bd.toString().substring(bd.toString().indexOf("E")+1,bd.toString().length()));
					}

					if(bd.toString().length()>=32||scalNeg<=0){
						df.applyPattern("0.##############################E0");
						String tempstr=df.format(bd);

						int scale=Integer.parseInt(tempstr.substring(tempstr.indexOf("E")+1,tempstr.length()));
						if(scale>=32||scale<=-31||scalNeg<-31){
							displayField.setText(tempstr);
						}
						else{
							displayField.setText(bd.toString());
						}
					}
					else{

						displayField.setText(decimalismFormat.format(bd));
					}
				}
				catch (Exception e) {
					JOptionPane.showMessageDialog(null,"对不起,数值过大!计算停止!","提示",JOptionPane.ERROR_MESSAGE);
				}

				isOperandBegin=true;
				isDot=false;
			}
		});

		//创建XPow2按钮
		btnXPow2=new JButton("x^2");
		btnXPow2.setForeground(Color.MAGENTA);
		btnXPow2.setMargin(new Insets(0,1,2,1));
		container.add(btnXPow2);
		btnXPow2.addActionListener(new ActionListener(){
			public void actionPerformed(ActionEvent arg0) {
				if(isError){
					return;
				}
				String str=displayField.getText();
				str=str.replace(",","");
				double num=Double.parseDouble(str);

				if(cbInv.isSelected()){
					try{
						if(num>=0){
							decimalismFormat.setMaximumFractionDigits(30);
							displayField.setText(decimalismFormat.format(Math.sqrt(num)));
						}
						else{
							displayField.setText("函数输入无效。");
							isError=true;
						}
					}
					catch(NumberFormatException nfe){
					}
					cbInv.setSelected(false);
					return;
				}

				try{
					DecimalFormat df=new DecimalFormat();
					df.setDecimalSeparatorAlwaysShown(true);
					df.setMaximumFractionDigits(30);
					df.setMaximumIntegerDigits(32);

					BigDecimal bd=Arith.xpow2(str);

					int scalNeg=1;
					if(bd.toString().indexOf("E")!=-1){
						scalNeg=Integer.parseInt(bd.toString().substring(bd.toString().indexOf("E")+1,bd.toString().length()));
					}

					if(bd.toString().length()>=32||scalNeg<=0){
						df.applyPattern("0.##############################E0");
						String tempstr=df.format(bd);

						int scale=Integer.parseInt(tempstr.substring(tempstr.indexOf("E")+1,tempstr.length()));
						if(scale>=32||scale<=-31||scalNeg<-31){
							displayField.setText(tempstr);
						}
						else{
							displayField.setText(bd.toString());
						}
					}
					else{

						displayField.setText(decimalismFormat.format(bd));
					}
				}
				catch (Exception e) {
					JOptionPane.showMessageDialog(null,"对不起,数值过大!计算停止!","提示",JOptionPane.ERROR_MESSAGE);
				}

				isOperandBegin=true;
				isDot=false;
			}

		});

		//创建Ln按钮
		btnLn=new JButton("ln");
		btnLn.setForeground(Color.MAGENTA);
		btnLn.setMargin(new Insets(0,1,2,1));
		container.add(btnLn);
		btnLn.addActionListener(new ActionListener(){
			public void actionPerformed(ActionEvent arg0) {
				if(isError){
					return;
				}
				String tempStr=displayField.getText();
				tempStr=tempStr.replace(",","");
				double num=Double.parseDouble(tempStr);
				if(num==0){
					displayField.setText("函数输入无效。");
					isError=true;
					return;
				}
				if(cbInv.isSelected()){
					displayField.setText(decimalismFormat.format(Math.pow(Math.E,num)));
					cbInv.setSelected(false);
				}else{
					displayField.setText(decimalismFormat.format(Math.log(num)));
				}
				isOperandBegin=true;
				isDot=false;
			}
		});


		//创建Log按钮
		btnLog=new JButton("log");
		btnLog.setForeground(Color.MAGENTA);
		btnLog.setMargin(new Insets(0,1,2,1));
		container.add(btnLog);
		btnLog.addActionListener(new ActionListener(){

			public void actionPerformed(ActionEvent arg0) {
				if(isError){
					return;
				}
				String tempStr=displayField.getText();
				tempStr=tempStr.replace(",","");
				double num=Double.parseDouble(tempStr);
				if(num==0){
					displayField.setText("函数输入无效。");
					isError=true;
					return;
				}
				if(cbInv.isSelected()){
					displayField.setText(Arith.xpowy("10",(int)num).toString());
					cbInv.setSelected(false);
				}else{
					displayField.setText(ScienceArith.log10(num)+"");
				}
				isOperandBegin=true;
				isDot=false;
			}
		});


		//创建Factorial按钮
		btnFactorial=new JButton("n!");
		btnFactorial.setForeground(Color.MAGENTA);
		btnFactorial.setMargin(new Insets(0,1,2,1));
		container.add(btnFactorial);
		btnFactorial.addActionListener(new ActionListener(){
			public void actionPerformed(ActionEvent arg0) {
				if(isError==true){
					return;
				}
				String tempStr=displayField.getText();
				tempStr=tempStr.replace(",","");

				double num=java.lang.Double.parseDouble(tempStr);
				if(num>=22222){
					if(JOptionPane.CANCEL_OPTION==JOptionPane.showConfirmDialog(null,"数值过大,操作时间会比较长,是否继续?","提示",JOptionPane.OK_CANCEL_OPTION,JOptionPane.WARNING_MESSAGE)){
						displayField.setText("操作已取消。");
						isError=true;
						return;
					}
				}
				if(num<0){
					displayField.setText("函数输入无效。");
					isError=true;
					return;
				}
				BigInteger facResult=Arith.factorial(num);

				if(facResult.toString().length()>31){
					displayField.setText(new DecimalFormat("0.################################E0").format(facResult));
				}
				else{
					displayField.setText(facResult.toString()+".");
				}

				isOperandBegin=true;
				isDot=false;
			}
		});


		//创建MC按钮
		btnMC=new JButton("MC");
		btnMC.setForeground(Color.RED);
		btnMC.setMargin(new Insets(0,1,2,1));
		container.add(btnMC);
		btnMC.addActionListener(new ActionListener(){
			public void actionPerformed(ActionEvent arg0) {
				if(isError==true){
					return;
				}

				memoryPlusResult="0.";
				memoryLabel.setText("");
				isOperandBegin=true;
				isDot=false;
			}
		});

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

			public void actionPerformed(ActionEvent arg0) {
				if(isError==true){
					return;
				}


				displayField.setText(decimalismFormat.format(new BigDecimal(memoryPlusResult)));
			}
		});

		//创建MS按钮
		btnMS=new JButton("MS");
		btnMS.setForeground(Color.RED);
		btnMS.setMargin(new Insets(0,1,2,1));
		container.add(btnMS);
		btnMS.addActionListener(new ActionListener(){
			public void actionPerformed(ActionEvent arg0) {
				if(isError==true){
					return;
				}

				try {
					String displayStr=displayField.getText();

					DecimalFormat df=new DecimalFormat();
					df.setParseBigDecimal(true);
					df.setParseIntegerOnly(false);
					Object obj=df.parse(displayStr);

					double num=java.lang.Double.parseDouble(displayStr.replace(",",""));

					if(num!=0){
						memoryPlusResult=obj.toString();
						memoryLabel.setText("M");
						isOperandBegin=true;
						isDot=false;
					}
					else{
						displayField.setText("0.");
						isDot=false;
						isOperandBegin=true;
					}
					isOperandBegin=true;
					isDot=false;
				} catch (ParseException e) {
					e.printStackTrace();
				}
			}
		});


		//创建M+按钮
		btnMPlus=new JButton("M+");
		btnMPlus.setForeground(Color.RED);
		btnMPlus.setMargin(new Insets(0,1,2,1));
		container.add(btnMPlus);
		btnMPlus.addActionListener(new ActionListener(){
			public void actionPerformed(ActionEvent arg0) {
				if(isError==true){
					return;
				}

				try {
					String displayStr=displayField.getText();

					DecimalFormat df=new DecimalFormat();
					df.setParseBigDecimal(true);
					df.setParseIntegerOnly(false);
					Object obj=df.parse(displayStr);

					double num=java.lang.Double.parseDouble(displayStr.replace(",",""));

					if(num!=0){
						memoryPlusResult=Arith.add(memoryPlusResult,obj.toString()).toString();
						memoryLabel.setText("M");
						isOperandBegin=true;
						isDot=false;
					}
					else{
						displayField.setText("0.");

⌨️ 快捷键说明

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