본문 바로가기
Programming/Java * Spring

[Java] 12. Math Class - BigDecimal, BigInteger, MathContext

by 고막고막 2019. 4. 1.

BigDecimal

오차없는 실수 표현을 위한 클래스. 32bit 정수를 표현 가능하며, 숫자형으로 표현할 수 있는 범위를 넘었기 때문에 문자열로 값을 전달한다.

// 소수점 오차 발생
double e1 = 1.6;
double e2 = 0.1;
System.out.println("두 실수의 덧셈: "+(e1+e2));
System.out.println("두 실수의 곱셈: "+(e1*e2));

// double형인 매개변수가 전달될때 이미 Error가 발생
BigDecimal b1 = new BigDecimal(1.6);
BigDecimal b2 = new BigDecimal(0.1);	
System.out.println("두 실수의 덧셈: "+b1.add(b2));
System.out.println("두 실수의 곱셈: "+b1.multiply(b2));

// 오차없는 실수 표현을 하는데 반드시 문자열로 값을 전달해야 한다
BigDecimal b3 = new BigDecimal("1.6");
BigDecimal b4 = new BigDecimal("0.1");	
System.out.println("두 실수의 덧셈: "+b3.add(b4));
System.out.println("두 실수의 곱셈: "+b3.multiply(b4));

BigInteger

거의 무한한 크기(long 이상)의 정수형 숫자를 표현할 수 있다. 사칙연산 등의 매서드를 제공한다. 역시 문자열에 담아야 함.

// Long: Wrapper Class
System.out.println("최대 정수: "+Long.MAX_VALUE);
System.out.println("최소 정수: "+Long.MIN_VALUE);

// int나 long을 넘어가는 범위의 연산을 해야 하므로 문자열로 표현할 수 있다.
BigInteger bigValue1 = new BigInteger("1000000000000000000000000");
BigInteger bigValue2 = new BigInteger("9999999999999999999999999");	
BigInteger addResult = bigValue1.add(bigValue2);
BigInteger mulResult = bigValue1.multiply(bigValue2);		
System.out.println("큰 수의 덧셈: "+addResult);
System.out.println("큰 수의 곱셈: "+mulResult);

그 외 메서드

System.out.println("원주율: "+Math.PI);
System.out.println("2의 제곱근: "+Math.sqrt(2));
System.out.println("파이에 대한 Degree: "+Math.toDegrees(Math.PI));
System.out.println("2파이에 대한 Degree: "+Math.toDegrees(2.0*Math.PI));
double radius45 = Math.toRadians(45);
System.out.println("사인45: "+Math.sin(radius45));
System.out.println("코사인45: "+Math.cos(radius45));
System.out.println("탄젠트45: "+Math.tan(radius45));
System.out.println("로그25: "+Math.log(25));
System.out.println("2의 4승: "+Math.pow(2, 4));
System.out.println("파이의 절대값: "+Math.abs(Math.PI));
System.out.println("-파이의 절대값: "+Math.abs(-Math.PI));