페이징 처리를 구현하다가 공식중에 Math.ceil이 있는데, 좀 이해가 가지 않고 헷갈렸다.
Math.ceil이 올림인건 알지만, 소수점으로 계산했을때, 정수로 했을때 등등이 달랐기 때문에 어려웠다.
결과를 구글링 해보았지만 예제도 부족했고, 이참에 확실히 알아야 까먹지 않을것같아서 적어보기로 했다.
Math 클래스
java.lang 패키지에 속한 클래스로, 수학에서 자주 사용되는 상수와 함수들이 구현되어있는 클래스다.
여기 구현된 메서드들은 static Method 이므로, 객체를 생성하지 않고도 바로 구현할 수 있다.
Method 종류
1) random(랜덤 뽑기)
2) abs(절대값)
3) min(최소), max(최대)
4) ceil(올림), floor(내림), round(반올림)
5) pow, sqrt : 제곱근 관련 함수
6) sin, cos, tan : 삼각함수 관련 함수
.. 기타 등등
여기서 이번글에서는 Math.ceil 파헤치기!!
Math.ceil의 기능 + 헷갈리는 부분
① 올림: 소수점 뒤에 1이상의 숫자가 있으면 올린다.
Math.ceil(10.0)); // 10.0
Math.ceil(10.1)); // 11.0
Math.ceil(10.9)); // 11.0
② 정수형으로 계산했을떄.
여기서 주의할점이 자바는 정수형끼리 계산하면 결과도 정수형으로 나온다는 사실이다.
10/4는 사람이 계산하면 2.5가 나오므로 Math.ceil을 하면 올림이니까 3이 나오겠지?? 라고 생각하면 틀리다.
10/4를 하면 둘다 정수형이므로 뒤에 0.5가 버려지기때문에 올림을 하더라도 2.0이된다.
따라서 올림이되려면 정수형이 아닌 실수형으로 계산을 해야한다.
Math.ceil(10/4); // 2 -> 2.0
Math.ceil(10.0 / 4.0); // 2.5 -> 3.0
③ 나누기 계산에서 앞이 0인 경우
위에서와 같이 10/4 이렇게 [큰수/작은수]는 예측하기 쉬운데, [작은수/큰수]는 앞이 0인 소수점이 된다.
그럼, Math.ceil(1/10)과 Math.ceil(1.0/10.0)의 결과는 어떻게 될까??
여기서도 마찬가지로 정수형끼리 나누면 소수점이 없어진다는걸 꼭 기억하기!! 정답은 0.0과 1.0이다.
Math.ceil(1/10); // 0.1 -> 0.0 정수형끼리 계산했기때문에 소수점이 버려짐.
Math.ceil(1.0/10.0); // 0.1 -> 1.0 소수점뒤에 1이 있으므로 올림이 되어 1.0이 됨.
계산하는 값이 정수형이냐, 실수형이냐에 따라 결과가 0과 1로 엄청 달라져버린다.
이부분에서 헷갈리면 결과가 너무나 달라져버리니 주의해야겠다!!
'프로그래밍 언어 > JAVA' 카테고리의 다른 글
JAVA) 자바 2차원 리스트 만드는 방법. 2차원 배열, 이중 리스트 만들기 (0) | 2024.05.21 |
---|---|
JAVA) List<Map<String, Object>> 반복문 돌리기 (0) | 2023.03.24 |
JAVA) 예외 처리 try~catch, throws, 사용자 정의 예외 (0) | 2022.03.15 |
JAVA) 오류와 예외, 예외, 오류 메세지 보는 방법 (0) | 2022.03.14 |
JAVA) 인터페이스(interface) 정의, 사용 이유 (0) | 2022.03.03 |