Math 클래스
•
수학 계산에 유용한 메소드들로 구성
•
Math 클래스의 생성자는 접근 제어자가 private, 다른 클래스에서 Math 인스턴스 생성 불가
◦
클래스 내에 인스턴스 변수가 하나도 없어서 인스턴스를 생성할 필요가 X
◦
클래스 내 메소드는 모두 static
◦
이 외엔 두 개의 상수만 존재
public static final double E = 2.7182818284590452354; // 자연로그의 밑
public static final double PI = 3.14159265358979323846; // 원주율
Java
올림, 버림, 반올림
•
소수점 n번쨰 자리에서 반올림한 값을 얻기 위해선 round() 사용
◦
항상 소수점 첫째자리에서 반올림을 해서 정수값(long)을 반환
•
원하는 자리 수에서 반올림한 값을 얻기 위해선
◦
10의 n제곱으로 곱한 후 다시 곱한 수로 나눠주면 됨.
// 원래 값에 100을 곱한다.
90.7552 * 100 -> 9075.52
// 위 결과에 Math.round() 사용
Math.round(9075.52) -> 9076
// 위 결과를 다시 100.0으로 나눔
9076 / 100.0 -> 90.76
// 100으로 나누면
9076 / 100 -> 90
Java
•
버림은 단순히 10의 n제곱을 곱한 후, 10의 n제곱.0으로 나누기
MathEx1.java
예외를 발생시키는 메소드
•
메소드 이름에 Exact가 포함된 메소드 (JDK 1.8부터 추가)
◦
정수형 간의 연산에서 발생할 수 있는 오버플로우를 감지하고 예외를 발생시킴.
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로의 형변환
Java
MathEx2.java
삼각함수와 지수, 로그
MathEx3.java
StrictMath 클래스
•
Math 클래스는 OS의 메소드를 호출해서 사용하는데, OS마다 반올림 처리법과 같은 설정들이 조금씩 다를 수 있음.
→ 이런 차이를 해소하기 위해 성능을 포기, 항상 같은 결과를 얻는 StrictMath 클래스 사용
Math 클래스의 메소드
•
static double abs(double a)
static float abs(float f)
static int abs(int f)
static long abs(long f) : 주어진 값의 절대값 반환
int i = Math.abs(-10); // i = 10
double d = Math.abs(-10.0) // d = 10.0
Java
•
static double ceil(double a) : 주어진 값을 올림하여 반환
double d = Math.ceil(10.1); // d = 11.0
double d2 = Math.ceil(-10.1); // d = -10.0
double d3 = Math.ceil(10.000015); // d3 = 11.0
Java
•
static double floor(double a) : 주어진 값을 버림하여 반환
double d = Math.floor(10.8); // d = 10.0
double d2 = Math.floor(-10.8); // d = -11.0
Java
•
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) : 주어진 두 값을 비교하여 큰 쪽을 반환
double d = Math.max(9.5, 9.50001); // d = 9.50001
int i = Math.max(0, -1); // i = 0
Java
•
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) : 주어진 두 값을 비교하여 작은 쪽을 반환
double d = Math.max(9.5, 9.50001); // d = 9.5
int i = Math.max(0, -1); // i = -1
Java
•
static double rondom() : 0.0~1.0 범위의 임의의 double값 반환 (1.0은 범위에 포함 x)
double d = Math.random(); // 0.0<=d<1.0
int i = (int)(Math.random() * 10) + 1; // 1<=i<1
Java
•
static double rint(double a) : 주어진 double 값과 가장 가까운 정수값을 double형으로 반환
단, 두 정수의 정가운데 있는 값은 짝수를 반환
double d = Math.rint(1.2); // d = 1.0
double d2 = Math.rint(2.6); // d2 = 3.0
double d3 = Math.rint(3.5); // d3 = 4.0
double d4 = Math.rint(4.5); // d4 = 4.0
Java
•
static long round(double a)
static long round(float a) : 소숫점 첫쨰 자리에서 반올림한 정수값(long) 반환
매개변수의 값이 음수인 경우, round()와 rint()의 결과가 다름.
double l = Math.round(1.2); // l = 1
double l2 = Math.round(2.6); // l2 = 3
double l3 = Math.round(3.5); // l3 = 4
double l4 = Math.round(4.5); // l4 = 5
double d = 90.7552; // d = 90.7552
double d2 = Math.round(d*100)/100.0; // d2 = 90.76
Java