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

📄 calculator.java

📁 java 写的计算器程序
💻 JAVA
📖 第 1 页 / 共 5 页
字号:
				
				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(三角函数)
					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);
					
					if(viewMenu_numberGrouping.isSelected()){
						df.setGroupingUsed(true);
						decimalismFormat.setGroupingUsed(true);
					}else{
						df.setGroupingUsed(false);
						decimalismFormat.setGroupingUsed(false);
					}
					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(10,1,6,5));
		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);
					
					if(viewMenu_numberGrouping.isSelected()){
						df.setGroupingUsed(true);
						decimalismFormat.setGroupingUsed(true);
					}else{
						df.setGroupingUsed(false);
						decimalismFormat.setGroupingUsed(false);
					}
					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(viewMenu_numberGrouping.isSelected()){
					decimalismFormat.setGroupingUsed(true);
				}
				else{
					decimalismFormat.setGroupingUsed(false);
				}
				
				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;
				}				
				

⌨️ 快捷键说明

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