JAVA : Math, BigDecimal


こんにちは!😊 今日はMathとBigDecimalについて
Math
Mathは、数式セクションを作成するときに使用するクラスです.Java™ Platform Standard Ed. 8のMath Classをクリックすると、次の画面が表示されます.

Mathクラスのメソッドは次のとおりです.
method名説明round丸め:小数点の1番目の丸めで渡されたエラーの結果を返します.Ceil昇格:入力エラーより小さい整数の最小整数を返します.floor down:入力エラーより小さい整数の中で最大の整数を返します.pow二乗演算:最初の引数値の数に2番目の引数値を乗算します.abs絶対値を返します.正の値は負の値を返します.2つの最大値のうち1つの大きな値を返します.minは、2つの数の小さい値を返します.
それ以外にも、Mathクラスにはいろいろな方法があります.
  • すべてのメソッドのモディファイヤとタイプは静的で、Math.メソッド名.
  • Math.random()
    Modifier and TypeMethodDescriptionstatic doublerandom()Returns a double value with a positive sign, greater than or equal to 0.0 and less than 1.0.
    0~1の間の任意の値を出力します.この数を乱数といいます.
    Math.ランダム()使用例
    これらの数字を使用すると、デジタルゲームや宝くじ番号の作成、ランダムID、ランダムパスワード&ランダム検証コードの作成ができます.
    デジタルゲームを当てるとMath0と1の間の乱数を作成した後、100を乗じて実数を整数に変換し、1を加えて任意の数字を指定してゲームを開始します.
    package a.b.c.prac1;
    
    import java.util.Scanner;
    
    public class Math_p3{
    
    	public static void main(String[] args) {
    		int answer = (int)(Math.random() * 100) + 1;
    		System.out.println("answer >>> : " + answer);
    		
    		Scanner sc=new Scanner(System.in);
    		
    		int input = 0;
    		boolean iBool;
    		
    		try {
    			do {
    				System.out.println("1 과 100 사이의 정수값을 입력하시오 >>> : ");
    				input = sc.nextInt();
    				if (input<=100 && input>=1){
    					iBool=answer==input;
    					System.out.println("정답이면 true, 아니면 false"+iBool);
    					if (answer==input){
    						System.out.println("정답입니다!! 축하드립니다!!");
    						break;
    					}else if(answer>input){
    						System.out.println("땡!! 다시 입력하세요!!");
    						System.out.println("HINT : 더 높은 숫자를 입력하세요.");
    						sc.nextLine();
    					}else if(answer<input){
    						System.out.println("땡!! 다시 입력하세요");
    						System.out.println("HINT : 더 낮은 숫자를 입력하세요.");
    					}
    				}
    				else{
    					System.out.println("잘못 입력한 값 >>> "+input);
    					System.out.println("범위를 다시 확인하시고, 다시 입력해주세요.");
    					sc.nextLine();
    				}				
    			}
    		while (true);
    
    		}catch(Exception e){
    			System.out.println("정수를 입력하지 않아 게임을 종료합니다.");
    		}finally{
    			System.out.println("숫자 맞추기 게임을 종료합니다.");
    			sc.close();
    		}
    	}
    }
    ✔出力結果
    👀 case1
    answer >>> : 89
    1100 사이의 정수값을 입력하시오 >>> : 
    88
    정답이면 true, 아니면 falsefalse
    땡!! 다시 입력하세요!!
    HINT : 더 높은 숫자를 입력하세요.
    1100 사이의 정수값을 입력하시오 >>> : 
    90
    정답이면 true, 아니면 falsefalse
    땡!! 다시 입력하세요
    HINT : 더 낮은 숫자를 입력하세요.
    1100 사이의 정수값을 입력하시오 >>> : 
    89
    정답이면 true, 아니면 falsetrue
    정답입니다!! 축하드립니다!!
    숫자 맞추기 게임을 종료합니다.
    👀 case2
    answer >>> : 34
    1100 사이의 정수값을 입력하시오 >>> : 
    1000
    잘못 입력한 값 >>> 1000
    범위를 다시 확인하시고, 다시 입력해주세요.
    1100 사이의 정수값을 입력하시오 >>> : 
    종료
    정수를 입력하지 않아 게임을 종료합니다.
    숫자 맞추기 게임을 종료합니다.
    宝くじ番号が生成された場合、Math.0と1の間の乱数()を作成し、実数を整数(45を乗じた)に変換し、1と45の間の乱数を作成します.次に配列を入力し、配列内の値が重複すると、for文はindexを1つ減らし、重複値を1つに統一します.
    package a.b.c.ch5;
    
    public class Lotto{	
    	public static void main(String[] args) {
    		String n0 = "";
    		String n1 = "";
    		char c = 'A';
    		String n2[]= {" 자 동 ", " 수 동  "};		
    
    		for (int n=0; n < 5; n++) {
    			
    			int lo[] = new int[6];		
    			
    			for (int i=0; i < lo.length; i++){
    				
    				lo[i] = (int)(Math.random()*45) + 1;
    				for (int j=0; j < i; j++ ){				
    					if (lo[j] == lo[i]){
    						i--;
    						break;
    					}
    				}
    			}
    							
    			for (int i=0; i < lo.length; i++ ){								
    				if (lo[0] == lo[i]) {								
    					n1 = String.valueOf(lo[i]);								
    					if (1 == n1.length()) {
    						n1 = "0" + n1;
    					}										
    					n0 = c + n2[1] + n1;
    					c += 1;
    				}else {						
    					n0 = String.valueOf(lo[i]);					
    					if (1 == n0.length()) {
    						n0 = "0" + n0;
    					}	
    				}
    				
    				n0 += " ";	
    				
    				System.out.print(n0);				
    			}	
    			
    			System.out.println();
    		}  							
    	}
    }
    ✔出力結果
    A 수 동  11 10 32 02 09 08 
    B 수 동  26 39 43 03 06 11 
    C 수 동  26 41 17 24 29 20 
    D 수 동  17 30 35 10 34 25 
    E 수 동  30 05 32 02 20 44
    ランダムアイデンティティ&ランダムパスワード&ランダム検証コードの作成
    package a.b.c.ch5;
    
    import java.util.UUID;
    
    public class Random_NUM {
    	public static String tempPW(int len) {
    		String u = UUID.randomUUID().toString();
    		System.out.println("u >>> : " + u);
    		u = u.replace("-","").substring(0, len);
    		System.out.println("u >>> : " + u);
    		return u;
    	}
    	
    	public static String randomPW(int len) {
    		char c[] = {
    						'1','2','3','4','5','6','7','8','9','0', 
    			        	'A','B','C','D','E','F','G','H','I','J',
    			        	'K','L','M','N','O','P','Q','R','S','T',
    			        	'U','V','W','X','Y','Z', 
    			        	'a','b','c','d','e','f','g','h','i','j',
    			        	'k','l','m','n','o','p','q','r','s','t',
    			        	'u','v','w','x','y','z',
    			        	'!','@','#','&'
    			        	//'!','@','#','$','%','^','&','*','(',')'
    		        	}; 
    		String p = "";
    		for (int i=0; i < len; i++) {
    			int a = (int)(Math.random()*(c.length));
    			p += c[a];
    		}
    		return p;
    	}	
    	
    	public static String certificNum(int len) {
    		
    		char c[] = {'1','2','3','4','5','6','7','8','9'}; 
    
    		String p = "";
    		
    		for (int i=0; i < len; i++) {
    			int a = (int)(Math.random()*(c.length));
    			p += c[a];
    		}
    		
    		return p;
    	}	
    
    	public static void main(String[] args) {
    		String s1 = Random_NUM.tempPW(8);
    		String s2 = Random_NUM.randomPW(8);
    		String s3 = Random_NUM.certificNum(6);
    		
    		System.out.println("UUID >>> : " + s1);
    		System.out.println("randomPW >>> : " + s2);
    		System.out.println("certificNum >>> : " + s3);
    	}
    }
    ✔出力結果
    u >>> : d79d52f7-df14-4893-920d-e788666e73b4
    u >>> : d79d52f7
    UUID >>> : d79d52f7
    randomPW >>> : QFzeh8jo
    certificNum >>> : 952974
    BigDecimal
    java.langパッケージにはMathクラスもありますがjava.mathパッケージにはBigDecimalクラスが含まれています.

    java.langパッケージにMathクラス、javaを配置します.math.BigDecimalクラスを使用する理由は、doubleとfloatのエラーがパラメータとして受信された場合、結果が正しくない場合があります.
    ✔Javaコンパイラは整数型しか知らない.😊
    package a.b.c.prac1;
    
    
    import java.math.BigDecimal;
    
    public class Math_9 {
    
    	public static void main(String[] args) {
        	int x2=1;
    		double y2=0.1;
    		int num=7;
    		double z2=x2-(num*y2); 
    		System.out.println("z2 >>> "+z2);
    ✔出力結果
    z2 >>> 0.29999999999999993
    Googleで数値を入力して計算すると、次のようになります.

    Mathメソッドでは,二重形式の自己変数値がしばしば受信されるが,この場合,解決策はjavaである.MathパッケージのBigDemicalクラスを利用します.
    BigDecimal b1= BigDecimal.valueOf(1);
    BigDecimal b2=BigDecimal.valueOf(0.7);
    System.out.println("b1.subtract(b2) >>> : "+b1.subtract(b2));
    ✔出力結果
    b1.subtract(b2) >>> : 0.3
    BigDecimal実習コード
    package a.b.c.prac1;
    
    import java.math.BigDecimal;
    
    public class Math_10 {
    
    	public static void main(String[] args) {
    		String x="37.56632697499861";
    		String y="126.97792762801669";
    
    		BigDecimal b1=new BigDecimal(x);
    		System.out.println("b1 >>> : "+b1);
    		BigDecimal b2=new BigDecimal(y);
    		System.out.println("b2 >>> : "+b2);
    		
    		double dx=37.56632697499861;
    		double dy=126.97792762801669;
    		
    		BigDecimal b11=new BigDecimal(dx);
    		BigDecimal b22=new BigDecimal(dy);
    		
    		System.out.println("dx >>> : "+dx);
    		System.out.println("dy >>> : "+dy);
    		
    		BigDecimal badd=b1.add(b2);
    		System.out.println("badd >>> : "+badd);
    		BigDecimal badd_D=b11.add(b22);
    		System.out.println("badd_D >>> : "+badd_D);
    
    		BigDecimal bsub=b1.subtract(b2);
    		System.out.println("bsub >>> : "+bsub);
            BigDecimal bsub_D=b11.subtract(b22);
    		System.out.println("bsub_D >>> : "+bsub_D);
    	}
    
    }
    出力結果
    b1 >>> : 37.56632697499861
    b2 >>> : 126.97792762801669
    dx >>> : 37.56632697499861
    dy >>> : 126.97792762801669
    badd >>> : 164.54425460301530
    badd_D >>> : 164.54425460301529682283216970972716808319091796875
    bsub >>> : -89.41160065301808
    bsub_D >>> : -89.41160065301807691184876603074371814727783203125
    BigDecimalコードによる解釈
    x,y,dx,dy

  • x,yはアルファベット数字です.文字数とは、「」または「」を削除する場合、
    数字を表します.現在、この2つのストレージはStringリソースとして保存されています.

  • 一方、dxおよびdyは、デュアルデータ型の数字である.この2つのファイルは現在、2つの資料形式で保存されています.
  • BigDecimal b1=new BigDecimal(x);
    BigDecimal b2=new BigDecimal(y);
    このコマンドインスタンスを使用して、b 1という名前の参照変数を文字数で宣言します.
    このようにしてb 1、b 2を行い、この2つの変数を出力し、double資料型の変数と比較します.
    b1 >>> : 37.56632697499861
    b2 >>> : 126.97792762801669
    dx >>> : 37.56632697499861
    dy >>> : 126.97792762801669
    🤔 ここではxの代わりに二重資料型のdxとdyを使うことはできませんか?
    BigDecimal b11=new BigDecimal(dx);
    BigDecimal b22=new BigDecimal(dx);
    new BigDecimal()のカッコにdoubleデータ型と文字数を入力します.
    加算と減算を使用して比較した結果は次のとおりです.
    BigDecimal badd=b1.add(b2);
    BigDecimal badd_D=b11.add(b22);
    System.out.println("bsub >>> : "+bsub);
    System.out.println("bsub_D >>> : "+bsub_D);
    badd >>> : 164.54425460301530
    badd_D >>> : 164.54425460301529682283216970972716808319091796875
    bsub >>> : -89.41160065301808
    bsub_D >>> : -89.41160065301807691184876603074371814727783203125
    上記のコードでは、doubleをパラメータとして使用し、BigDecimalクラスの参照変数を使用して結果と文字定数を計算し、BigDecimalクラスの参照変数を使用して計算する場合、その値が異なります.
    以上、JAVA:Math BigDecimal😀