더북(TheBook)

같은 문제를 int로 한 번 더 살펴보자.

int z = -222/14;

이번에는 z-15다. 원하던 답이 아니며 Math.floor(-15)가 -15이므로 Math.floor(z)로도 문제가 해결되지 않는다. 즉, 이 문제를 고려해야 한다.

JDK 8부터 이러한 문제를 전부 해결했고, 이는 Math.floorDiv() 메서드로 드러냈다. 이 메서드는 피제수와 제수를 표현한 두 정수를 인자로 받아 대수 몫보다 작거나 같은 가장 큰(양수 무한대에 가장 가까운) int 값을 반환한다.

int x = -222;
int y = 14;

// x는 피제수, y는 제수
int z = Math.floorDiv(x, y); // -16

Math.floorDiv() 메서드에는 floorDiv(int x, int y)floorDiv(long x, int y), floorDiv (long x, long y)의 세 가지 유형이 있다.

Info ≣ Math.floorDiv() 외에도 JDK 8은 주어진 인자들을 나눈 나머지의 버림을 반환하는 Math.floorMod()를 제공한다. x - (floorDiv(x, y) * y)로 값을 계산하므로 부호가 같은 인자들에 % 연산자를 적용한 결과와 같고, 부호가 다른 인자들에 % 연산자를 적용한 결과와는 다르다.

신간 소식 구독하기
뉴스레터에 가입하시고 이메일로 신간 소식을 받아 보세요.