충분히 쌓여가는
StringBuilder, Math 클래스 본문
StringBuilder(StringBuilder ≒ StringBuffer)
StringBuilder는 동기화되어 있지 않다
StringBuffer는 동기화되어 있다[멀티 쓰레드에 안전하다(thread-safe)]
멀티 쓰레드 프로그램이 아닌 경우(싱글 쓰레드), 동기화는 불필요한 성능저하 => StringBuffer 대신 StringBuilder을 사용하면 성능이 향상된다
더보기
싱글 쓰레드: 한 번에 하나의 작업
멀티 쓰레드: 동시에 여러 작업
메서드들은 그대로 놔두고 클래스 이름만 바꿔주면 된다
Math 클래스
수학관련 static 메서드의 집합(instance variable이 없기 때문에 객체 만들 필요가 없다)
public static final double E = 2.7182818284590452354;
public static final double PI = 3.14159265358979323846;
round()로 원하는 소수점 아래 세 번째 자리에서 반올림하기
1. 원래 값에 100을 곱한다
90.7552 * 100 => 9075.52
2. 위의 결과에 Math.round()를 사용한다
Math.round(9075.52) => 9076
3. 위의 결과를 다시 100.0으로 나눈다
9076 / 100.0 => 90.76
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); double d = Math.abs(-10.0); |
주어진 값의 절대값을 반환한다 | i = 10 d = 10.0 |
static double ceil(double a) | double d = Math.ceil(10.1); double d2 = Math.ceil(-10.1); double d3 = Math.ceil(10.000015); |
주어진 값을 올림하여 반환한다 | d = 11.0 d2 = -10.0 d3 = 11.0 |
static double floor(double a) | double d = Math.floor(10.8); double d2 = Math.floor(-10.8); |
주어진 값을 버림하여 반환한다 | d = 10.0 d2 = -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) |
double d = Math.max(9.5, 9.50001); int i = Math.max(0, -1) |
주어진 두 값을 비교하여 큰 쪽을 반환한다 | d = 9.50001 i = 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) |
double d = Math.min(9.5, 9.50001); int i = Math.min(0, -1) |
주어진 두 값을 비교하여 작은 쪽을 반환한다 | d = 9.5 i = -1 |
static double random() | double d = Math.random(); int i = (int)(Math.random()*10) + 1; |
0.0 ~ 1.0 범위의 임의의 double 값을 반환한다 (1.0은 범위에 포함되지 않는다) |
0.0 <= d < 1.0 1 <= i < 11 |
static double rint(double a) | double d = Math.rint(1.2); double d2 = Math.rint(2.6); double d3 = Math.rint(3.5); double d4 = Math.rint(4.5); |
주어진 double 값과 가장 가까운 정수값을 double 형으로 반환한다 단, 두 정수의 정가운데 았는 값(1.5, 2.5., 3.5 등)은 짝수를 반환한다 |
d = 1.0 d2 = 3.0 d3 = 4.0 d4 = 4.0 |
static long round(double a) static long round(float a) |
long l = Math.round(1.2); long l2 = Math.round(2.6); long l3 = Math.round(3.5); long l4 = Math.round(4.5); double d = 90.7552; double d2 = Math.round(d*100)/100.0; |
소수점 첫째자리에서 반올림한 정수값(long)을 반환한다 두 정수의 정가운데있는 값은 항상 큰 정수를 반환한다 |
l = 1 l2 = 3 l3 = 4 l4 = 5 d = 90.7552 d2 = 90.76 |
round, int 비교
public class roundTest {
public static void main(String[] args) {
for (double d = 0.0; d < 2.0; d+= 0.1) {
double d1 = Math.round(d);
double d2 = Math.rint(d);
System.out.printf("%4.1f %4.1f %4.1f%n", d, d1, d2);
}
}
}
0.0 0.0 0.0
0.1 0.0 0.0
0.2 0.0 0.0
0.3 0.0 0.0
0.4 0.0 0.0
0.5 1.0 0.0 // 다름
0.6 1.0 1.0
0.7 1.0 1.0
0.8 1.0 1.0
0.9 1.0 1.0
1.0 1.0 1.0
1.1 1.0 1.0
1.2 1.0 1.0
1.3 1.0 1.0
1.4 1.0 1.0
1.5 2.0 2.0
1.6 2.0 2.0
1.7 2.0 2.0
1.8 2.0 2.0
1.9 2.0 2.0
public class roundTest {
public static void main(String[] args) {
double sum = 0;
double sum1 = 0;
double sum2 = 0;
for (double d = 1.5; d <= 10.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.5 2.0 2.0
2.5 3.0 2.0 // 다름
3.5 4.0 4.0
4.5 5.0 4.0 // 다름
5.5 6.0 6.0
6.5 7.0 6.0 // 다름
7.5 8.0 8.0
8.5 9.0 8.0 // 다름
9.5 10.0 10.0
10.5 11.0 10.0 // 다름
---------------
49.5 54.0 50.0
'Java > JAVA2' 카테고리의 다른 글
오토박싱 & 언박싱 (0) | 2023.06.29 |
---|---|
래퍼(wrapper) 클래스, Number 클래스 (0) | 2023.06.29 |
StringBuffer 클래스의 메서드 (0) | 2023.06.28 |
StringBuffer 클래스 (0) | 2023.06.27 |
StringJoiner, 문자열과 기본형 반환 (0) | 2023.06.26 |