자바

[자바] Math 클래스의 여러가지 메서드를 알아보자. (ceil & floor & round & pow & sqrt & abs)

imcoding 2022. 7. 1. 15:02
Math

 

Math 클래스가 기본적으로 max와 min 메서드를 갖는다는 것은 대부분 알것이다.

그 외에도 Math 클래스는 수많은 메서드를 갖고있다.

그 중 몇가지를 예시와 함께 소개하겠다.

 

ceil & floor & round

public class Note {
    public static void main(String[] args) {

        double num = 21.476;

        System.out.println(Math.ceil(num)); // 올림
        System.out.println(Math.floor(num)); // 버림
        System.out.println(Math.round(num)); // 반올림
    }
}
 출력
22.0
21.0
21

세 함수 모두 소수점 첫째자리에 대해서 적용되며,

ceil은 올림 / floor는 버림 / round는 반올림을 수행한다.

한가지 주의할것은 소수점 첫째자리에서 발생하기 때문에 21.47을 반올림하더라도 21.5가 아니라 21이 된다는 점이다.

 

그렇다면 더 나아가서, 21.476을 소수점 둘째자리까지 반올림해서 21.48로 만들고 싶다면?

round는 소수점 첫째자리에서 무조건 반올림 하기 때문에 이 경우에는 약간의 응용이 필요하다.

 

이를 위해 우선 2147.6을 21.48로 표현하는 법 부터 배워보자.

 

코드를 보자.

        double num = 2147.6;

        System.out.println(Math.round(num) / 100);

위 코드를 실행했을 때 결과값을 예상해보자.

2147.6에서 반올림되면 2148이 되고, 100으로 나누면? 21.48이 아니라 21이다.

단순 round함수만 사용하지 않고, 연산자를 넣었기 때문에 리턴값은 int 타입이 기본이된다.

따라서 우리는 먼저 double타입으로 형변환이 필요하다.

 

그럼 다시 아래 코드를 보자.

        double num = 2147.6;

        System.out.println((double) Math.round(num) / 100);

 

이렇게 해야 출력값이 21.48이 나온다.

우리는 여기서 힌트를 얻을 수 있다.

이제 21.476을 어떻게 해야 21.48로 만들 수 있을지 감이 오는가?

먼저 2147.6으로 만들고 나서 21.48로 만들면 되는것이다!

        double num = 21.476;

        System.out.println((double) Math.round(num * 100) / 100);

위 코드를 실행함으로써 우리가 원하는 결과값 21.48을 얻을 수 있다.

만약 셋째자리까지 얻고싶다면?

같은 방식으로 가능하다.

물론, ceil과 floor에도 적용할 수 있다. (ceil과 floor는 결과값에 double타입을 명시해주지 않아도 된다.)

        double num = 11.4764;

        System.out.println(Math.ceil(num * 1000) / 1000); // 11477 -> 11.477
        System.out.println(Math.floor(num * 1000) / 1000); //11476 -> 11.476
        System.out.println((double) Math.round(num * 1000) / 1000); // 11476.4 -> 11.476

이는 아래처럼도 표현 가능하다.

        double num = 1.4764;

        System.out.println((double) Math.round(num * Math.pow(10, 3)) / Math.pow(10, 3)); // 1.476

여기서 사용된 pow함수는 무엇일까?

바로 아래에서 설명하겠다.

 

 

pow & sqrt

pow는 n제곱, sqrt는 제곱근의 결과값을 구할때 사용한다.

바로 예시코드를 보자.

        int num = 100;

        System.out.println(Math.pow(num, 3)); // 1000000.0
        System.out.println(Math.sqrt(num));   // 10.0
        System.out.printf("%.0f", Math.sqrt(num)); // 10

 

반면, sqrt는 제곱근을 구할 때 사용한다.

4의 제곱근은 2고 9의 제곱근은 3이다. 코드로 확인해보자.

        int four = 4;
        int nine = 9;

        System.out.println(Math.sqrt(four)); // 2
        System.out.println(Math.sqrt(nine)); // 3

 

pow와 sqrt를 이용해서 피타고라스 법칙에 따른 이등변삼각형의 빗변 즉, (x, y) 좌표에서 두 점 사이 거리를 구해보겠다.

        int x1 = 1;
        int y1 = 5;

        int x2 = 4;
        int y2 = 9;

        double distance = Math.sqrt(((Math.pow((x1-x2), 2)) + Math.pow((y1-y2), 2)));
        System.out.println(distance); // 5.0

 

abs

다음은 매개변수를 절대값으로 반환해주는 abs 함수다.

간단하니 예시정도만 보고 넘어가자.

        int num = 50;

        System.out.println(Math.abs(num - 100.5)); // 50

int, long, float, double 타입을 매개변수로 사용할 수 있다.

 

 

여기까지 자릿수 올림, 내림에 관여하는 ceil, floor, round

제곱에 관여하는 pow, sqrt

절대값으로 바꿔는 abs 함수에 대해 알아보았다.