개발 공부/Java & Spring

9. Math클래스

빵다희 2022. 12. 6. 22:32
Math클래스 
- Math클래스는 기본적인 수학계산에 유용한 메서드로 구성되어 있다.
- Math클래스의 생성자는 접근 제어자가 private이기 때문에 다른 클래스에서 Math인스턴스를 생성할 수 없도록 되어있다. 
- Math클래스의 메서드는 모두 static이며 아래와 같이 2개의 상수만 정의해 놓았다.( E : 자연로그의 밑, PI : 원주율)
원하는 소수점 자리에서 반올림 하는 방법

* Math클래스의 round() 함수는 항상 소수점 첫째자리에서 반올림을 한다.

* 반올림이 필요하지 않다면 round() 함수를 사용하지 않고 단순히 100으로 곱하고 100.0으로 나누기만 하면 된다.

예시) 90.7552를 소수점 셋째자리에서 반올림 후 소수점 두 자리까지의 값을 얻는 방법

1. 원래 값에 100을 곱한다.(소수점 두자리까지만 값을 얻고 싶으면 100, 소수점 셋째자리는 1000을 곱함 )

90.7552 * 100 -> 9075.52

2. 위의 결과에 Math.round()를 사용한다. 

Math.round(9075.52) -> 9076

3. 위의 결과를 다시 100.0으로 나눈다.(소수점 두자리까지만 값을 얻고 싶으면 100.0, 소수점 셋째자리는 1000.0을 나눔 )

9076 / 100.0 -> 90.76
/* 정수형을 얻고 싶다면 */
9076 / 100 -> 90
예외를 발생시키는 메서드 
이름에 'Exact'가 포함된 메서드들은 정수형간의 연산에서의 오버플로우 에러를 감지하여 예외를 발생시킨다.
- int addExact (int x, int y )                 // x + y
- int subtractExact (int x, int y )         // x - y
- int multiplyExact (int x, int y )          // x * y
- int incrementExact (int a)                // a++
- int decrementExact (int a)              // a--
- int negateExact (int a)                    // -a
- int toIntExact (long value)              // (int)value     - int로의 형변환
Math클래스의 메서드 
메서드 설명 예제
static double abs(double a )
static float abs(float a )
static int abs(int a )
static long abs(long a )
주어진 값의 절대값을 반환한다. Math.abs(-10);  // 10
Math.abs(-10.0);  // 10.0
static double ceil(double a ) 주어진 값을 올림하여 반환한다. Math.ceil(10.1);             // 11.0
Math.ceil(-10.1);           // -10.0
Math.ceil(10.000015);  // 11.0
static double floor(double a) 주어진 값을 버림하여 반환한다. Math.floor(10.8); // 10.0
Math.floor(-10.8); // -11.0
static double max(double a, double b)
static float max(float a, float b)
static int max(int a, int b)
static long max(long a, long b)
주어진 두 값을 비교하여 큰 쪽을 반환한다. Math.max(9.5, 9.50001); // 9.50001
Math.max(0, -1);               // 0
static double min(double a, double b)
static float min(float a, float b)
static int min(int a, int b)
static long min(long a, long b)
주어진 두 값을 비교하여 작은 쪽을 반환한다. Math.min(9.5, 9.50001); // 9.5
Math.min(0, -1);               // -1
static double random() 0.0 ~ 1.0범위의 임의의 double값을 반환한다.
(1.0은 범위에 포함되지 않는다.)
double d = Math.random(); 
=> 0.0 <= d < 1.0

int i = (int)(Math.random() * 10) + 1
=> 1 <= i < 11
static double rint(double a) 주어진 double값과 가장 가까운 정수값을 double형으로 반환한다.
단, 두 정수의 정가운데 있는 값(1.5, 2.5, 3.5 등)은 짝수를 반환 
Math.rint(1.2);  // 1.0 
Math.rint(2.6);  // 3.0 
Math.rint(3.5);  // 4.0
Math.rint(4.5);  // 4.0
static long round(double a)
static long round(float a)
소수점 첫째자리에서 반올림한 정수값(long)을 반환한다.
매개변수의 값이 음수인 경우, round()와 rint()의 결과가 다르다는 것에 주의하자
Math.round(1.2);  // 1
Math.round(2.6);  // 3
Math.round(3.5);  // 4 
Math.round(4.5);  // 5
double d = 90.7552;
Math.round(d*100)/100.0; // 90.76
static double sqrt(double a) 주어진 값의 제곱근을 계산해준다.  Math.sqrt(25); // 5.0
static double pow(double a, double b)  주어진 값 a의 b 제곱을 계산해준다.  Math.pow(2,3); // 8.0
StrictMath클래스 
Math클래스는 최대한의 성능을 얻기 위해 JVM이 설치된 OS의 메서드를 호출해서 사용한다. 
계산 방법 설정이 OS마다 다를 수 있기 때문에 자바로 작성된 프로그램일지라도 컴퓨터마다 결과값이 다를 수 있다.
이러한 차이를 없애기 위해 성능은 다소 포기하는 대신, 어떤 OS에서 실행되어도 항상 같은 결과를 얻도록 Math클래스를 새로작성한 것이 StrictMath클래스이다. 
728x90
반응형