코린이의 소소한 공부노트

Math 클래스 본문

Java

Math 클래스

무지맘 2022. 8. 24. 13:12

Math 클래스는 수학 관련 static 메서드의 집합이다.

 

[상수]

public static final double E; // E = 2.7182818284590452354, 자연로그의 밑
public static final double PI; // PI = 3.14159265358979323846, 원주율

 

 

[메서드]

double d = 90.4552;
long l = Math.round(d); // l = 90

// d를 소수점 셋째 자리에서 반올림 하고 싶다면
d *= 100;		// d = 9045.52;
l = Math.round(d);	// l = 9046
d = l / 100.0;		// d = 90.46

// 만약 100.0이 아닌 100으로 나눈다면
d = l / 100; // d = 90.0

static long round(float a)

  - a와 가장 가까운 정수 값을 반환

  - 두 정수의 중간값이라면 큰 쪽을 반환

  - 양수의 경우 소수 첫 번째 자리에서 반올림한 값과 같음

  - 소수 n번째 자리에서 반올림하고 싶다면, 10^(n-1)을 곱해 round()를 쓰고 다시 10^(n-1)로 나눠줘야 함

    - 이때 나눌 때는 정수형이 아닌 실수형으로 나눠줘야 결과도 실수형으로 나옴

 

 

double d1 = Math.rint(1.2); // d1 = 1.0
double d2 = Math.rint(1.7); // d2 = 2.0
double d3 = Math.rint(1.5); // d3 = 2.0
double d4 = Math.rint(2.5); // d4 = 2.0 (3이 아님)

// round와 비교
double d1 = Math.round(1.2); // d1 = 1.0
double d2 = Math.round(1.7); // d2 = 2.0
double d3 = Math.round(1.5); // d3 = 2.0
double d4 = Math.round(2.5); // d4 = 3.0

staitc double rint(double a)

  - a와 가장 가까운 정수 값을 double로 변환 후 반환

  - 두 정수의 중간값이라면 짝수 쪽을 반환

 

 

int i = Math.abs(-10); // i = 10
double d = Math.abs(-5.0); // d = 5.0

static types abs(types a)

  - a의 절댓값을 반환

  - types: double, float, int, long

 

 

double d1 = Math.ceil(10.4); // d1 = 11.0
double d2 = Math.ceil(-10.4); // d1 = -10.0
double d3 = Math.ceil(10.0001); // d3 = 11.0

static double ceil(double a)

  - 정수 n에 대하여 n <= a < n+1일 때 n+1을 double로 변환 후 반환

  - a의 부호는 상관없음

 

 

double d1 = Math.floor(10.9); // d1 = 10.0
double d2 = Math.floor(-10.9); // d2 = -11.0

static double floor(double a)

  - 정수 n에 대하여 n <= a < n+1일 때 n을 double로 변환 후 반환

  - a의 부호는 상관없음

 

 

double d = Math.max(10.5, 10.6); // d = 10.6
int i = Math.max(-1, -1); // i = -1

static types max(types a, types b)

  - a, b 중에서 더 큰 쪽을 반환

  - types: double, float, int, long

 

 

double d = Math.min(10.5, 10.6); // d = 10.5
int i = Math.min(-1, -1); // i = -1

static types min(types a, types b)

  - a, b 중에서 더 작은 쪽을 반환

  - types: double, float, int, long

 

 

double d = Math.random(); // 0.0 <= d < 1.0
int i = (int)(Math.random()*10) + 1; // 1 <= i < 11

static double random()

  - 0.0 이상 1.0 미만의 값 중 랜덤으로 반환

 

[쿠키글] rint를 쓰는 이유

크게 중요하지는 않지만, rint 메서드의 존재 이유를 간단히 살펴보자.

원래 double값과 round의 결과, rint의 결과를 출력하고, 마지막에 각각의 총합을 비교해보려 한다.

double sum=0, sum1=0, sum2=0;
System.out.println("  d    d1   d2");

for(double d=0.5 ; d<=9.5 ; d++){
    double d1 = Math.round(d);
    double d2 = Math.rint(d);
    System.out.printf("%4.1f %4.1f %4.1f %n",d, d1, d2);
    sum += d;
    sum1 += d1;
    sum2 += d2;
}

System.out.println("----------------");
System.out.printf("%4.1f %4.1f %4.1f %n",sum, sum1, sum2);

위 코드의 결과는 아래와 같다.

1) round는 무조건 반올림이기 때문에 sum1과 sum의 오차가 크다.

2) rint는 짝수 반올림이기 때문에 sum2와 sum의 오차가 최소화된다.

오차가 적어야 유리한 경우 rint 메서드를 이용하는 것이 좋다.

'Java' 카테고리의 다른 글

래퍼 클래스, 넘버 클래스  (0) 2022.10.11
StringBuilder 클래스  (0) 2022.08.24
StringBuffer 클래스  (0) 2022.08.18
문자열의 결합과 변환  (0) 2022.08.18
String 클래스  (0) 2022.08.16