반응형

반올림 - Math.round()

  • 실수를 소수점 첫 째자리에서 반올림한 정수를 반환
long result = Math.round(4.52);		// result에 5가 저장된다.

이런 방식으로 사용한다.

이번에는 예제를 보자.

[Ex3_11]

public class Ex3_11 {
    public static void main(String argsp[]){
        double pi = 3.141592;
        double shortPi = Math.round(pi*1000) / 1000.0;
        System.out.println(shortPi);
    }
}

 

 

 

만약에 소수점 넷째자리에서 반올림을해서 3.142를 얻고싶으면 어떻게 해야하는지를 보여준 예제이다.

이 Math.round()라는 메서드는 첫째자리에서만 반올림 하기 때문에, 우리가 원하는 자리에서 반올림하려면 10의 n제곱으로 곱해서 반올림한다음에 다시 나눠야 한다.

pi에 1000을 곱하면 3141.592가 된다. 
이때, Math.round()를 사용하면 3141.592에서 소수점 첫째자리를 반올림 하기 때문에 3142가 된다.
이것을 1000.0으로 나누어 준다.

그러면, 3.142가 되어 우리가 원하는대로 3.141592를 소수점 넷째자리에서 반올림한 값을 결과로 받을 수 있다.

근데 만약에 마지막에 1000.0이 아니라 1000으로 나누어 주면 어떻게 될까?

int 3142 / int 1000 을 하면 integer나누기 integer이므로 결과가 integer가 되서 결과는 int3이 된다. 
integer는 소수점을 저장할 수 없기 때문이다.

그런데, 이것을 double값인 1000.0 으로 나누어 주면,


integer / doulbe이므로 integer가 double로 바뀌어 double/double 즉, 값은 double로 나온다.

 

double pi = 3.141592;		3.141로 바꾸려면?

그러면 이번에는 만약에 위의 pi값인 3.141592에서 뒤에를 잘라버리고 3.141만 얻고싶으면 어떻게 해야할까?

System.out.println((int)(pi*1000));
System.out.println((int)(pi*1000) / 1000.0);                // 소수점 아래의 값을 잘라낼 때 형변환 연산자 사용

pi에 1000을 곱해서 3141.592로 만든 후, 형변환 연산자 (int)를 사용해서
int로 형변환을 하면, 뒤의 소수점이 날아간다.
그리고 그 이후에 1000.0으로 다시 나누어 주면, 3.141을 얻을 수 있다.

 


 

나머지 연산자 (%)

  • 오른쪽 피연산자로 나누고 남은 나머지를 반환

[Ex3_12]

public class Ex3_12 {

    public static void main(String args[]) {
        int x = 10;
        int y = 8;

        System.out.printf("%d을 %d로 나누면, %n", x, y);
        System.out.printf("몫은 %d이고, 나머지는 %d입니다.%n", x / y, x % y);
    }
}

[출력 결과]

10을 8로 나누면, 
몫은 1이고, 나머지는 2입니다.

나머지 연산자는 피연산자로 0이아닌 정수만 허용된다(부호는 무시된다)

System.out.println(10 % 8);		// 10을 8로 나눈 나머지 2가 출력된다.
System.out.println(10 % 8);		// 위와 같은 결과를 얻는다.

 

반응형

'JAVA' 카테고리의 다른 글

논리 연산자, 논리 부정 연산자  (0) 2022.03.16
비교 연산자, 문자열의 비교  (0) 2022.03.16
사칙 연산자, 산술변환  (0) 2022.03.16
형변환 연산자, 자동 형변환  (0) 2022.03.15
증감 연산자, 부호 연산자  (0) 2022.03.15