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
반응형
'개발 공부 > Java & Spring' 카테고리의 다른 글
11. java.time 패키지 (0) | 2022.12.28 |
---|---|
10. 래퍼 클래스(wrapper 클래스) (0) | 2022.12.07 |
8. StringBuffer 클래스와 StringBuilder 클래스 (0) | 2022.12.06 |
7. 예외처리(exception handling) (0) | 2022.11.12 |
6. 내부 클래스(inner class) (1) | 2022.11.06 |