1. Math.round / Math.ceil / Math.floor

public class RoundTest {
	public static void main(String[] args) {
		
		double ABC = 1234.56789;
		
		// 곱하기 몇을 하면, 나누기 몇을 하면 몇의 자리니 하는 식으로 생각하지 말고 소수점을 좌우로 밀고 당겨 반올림 하고 원래대로 밀고 당겨 복원시킨다는 개념으로 이해하자.
		// 반올림
		System.out.println(Math.round(ABC));					// 결과 : 1235
		System.out.println(Math.round(ABC / 100) * 100);		// 결과 : 1200
		System.out.println(Math.round(ABC / 1000) * 1000);		// 결과 : 1000
		System.out.println(Math.round(ABC * 100) / 100.0);		// 결과 : 1234.57		(반드시 100.0으로 나눠야한다. 안 그러면 소수점 아래가 날아감.)
		System.out.println(Math.round(ABC * 1000) / 1000.0);	// 결과 : 1234.568
		
		System.out.println("");
		
		// 올림
		System.out.println(Math.ceil(ABC));					// 결과 : 1235.0
		System.out.println(Math.ceil(ABC / 100) * 100);			// 결과 : 1300.0
		System.out.println(Math.ceil(ABC / 1000) * 1000);		// 결과 : 2000.0
		System.out.println(Math.ceil(ABC * 100) / 100.0);		// 결과 : 1234.57
		System.out.println(Math.ceil(ABC * 1000) / 1000.0);		// 결과 : 1234.568
		
		System.out.println("");
		
		// 내림
		System.out.println(Math.floor(ABC));					// 결과 : 1234.0
		System.out.println(Math.floor(ABC / 100) * 100);			// 결과 : 1200.0
		System.out.println(Math.floor(ABC / 1000) * 1000);		// 결과 : 1000.0
		System.out.println(Math.floor(ABC * 100) / 100.0);		// 결과 : 1234.56
		System.out.println(Math.floor(ABC * 1000) / 1000.0);		// 결과 : 1234.567
	
		System.out.println("");

	}
	
}


여기서 키 포인트는 곱하기, 나누기의 개념이 아니라 소수점을 좌우로 밀고 당긴다는 개념으로 이해하자!!

 

 

2. 자릿수 맞추기

1 ) 정수 자릿수 맞추기

학생 성적표가 있다고 하자. 어떤 사람은 90점, 어떤 사람은 80점, 어떤 사람은 100점이라면 일반적으로 표현을 하면 다음과 같이 출력된다.

뚜비의 점수는 : 90
나나의 점수는 : 80
둘리의 점수는 : 100

이걸 동일한 모양으로 맞추고 싶다면 어떻게 해야할까?

뚜비의 점수는 :  90
나나의 점수는 :  80
둘리의 점수는 : 100

이렇게 숫자를 앞에 공백을 포함해 3자리로 맞춰주면 됩니다. 엑셀에 있는 셀서식처럼 말이죠.

System.out.println(ABC);
System.out.println(String.format("%3d", ABC));
이렇게 String.format()을 이용해 자릿수를 맞춰주면 됩니다.

만약, 출력할 값이나 변수가 2개 이상이라면 아래와 같이 사용하면 된다.

System.out.println(String.format("%3d, %3d", ABC, DEF)); 

public class RoundTest {
	public static void main(String[] args) {
		
		// 정수 자릿수 맞추기
		int AAA = 123;
		int AAAA = 1234;
		int AAAAA = 12345;
        
		System.out.println(AAA);
		System.out.println(AAAA);
		System.out.println(String.format("%4d", AAA));
		System.out.println(AAAAA);
		System.out.println(String.format("%5d", AAA));

	}
}


결과 :

123
1234
 123
12345
  123

 

2 ) 실수 자릿수 맞추기

마찬가지로 실수의 자릿수도 이렇게 맞춰줄 수 있습니다. 이때 실수는 메소드 특성상 이하 자릿수는 반올림 처리를 해버립니다.

실수는 정수와 다르게 생각해야 할 개념이 하나 더 늘어납니다. 아니 정확히는 생각해야 할 개념이 아니라 컴퓨터가 어떻게 생각하는지를 배우는거죠. 예제를 보면 이해가 쉽습니다.

public class RoundTest {
	public static void main(String[] args) {

		double DDD = 123.4567;
		System.out.println(String.format("%.2f", DDD));		// 소수점 2자리까지 표현 + (소수점 3번째 자리에서 반올림)
		System.out.println(String.format("%10.2f", DDD));	 // 소수점 2자리까지 표현 + 자릿수 10자리까지 표현
		
	}
	
}

%.2f 를 하면 12.34567은 소수점 2자리까지 표현됩니다. 따라서, 소수점 3번째 자리에서 반올림 처리가 되어 12.35가 됩니다.

그렇다면 앞에 정수 부분은 3자리로 표현하고, 소수점 2자리에서 끊고 싶다면 어떻게 해야할까요?

%3.2f 를 하면 될까요? No!

컴퓨터가 자릿수를 어떻게 계산할까 컴퓨터처럼 생각해봐야합니다. 컴퓨터는 사람처럼 12.34567은 12라는 정수와 소수점 이하 .4567이 결합된거야! 라고 따로 분리해서 생각하지 않습니다.

int면 그냥 무조건 정수!
double이면 그냥 무조건 실수!

인 것이지요. double로 선언하면 10도 10.0이라는 실수로 생각하는 것과 같습니다.

12.34567을 ' 12.35'로 만들고 싶다면, '전체 자릿수 = 정수 자릿수(3) + 소수점 '.'(1) + 실수 자릿수(2) = 6' 을 하면 됩니다.

%6.2f 를 해야 하는 것이지요!!

예제로 살펴봅시다.

public class RoundTest {
	public static void main(String[] args) {

		double DDD = 12.34567;
		System.out.println(String.format("%.2f", DDD));		// 소수점 2자리까지 표현 + (소수점 3번째 자리에서 반올림)
		System.out.println(String.format("%6.2f", DDD));	 // 소수점 2자리까지 표현 + 자릿수 10자리까지 표현

	}
	
}


결과 : 

12.35
 12.35

 

3 ) 문자열 자릿수 맞추기

public class RoundTest {
	public static void main(String[] args) {

		String CC = "Hello";
		System.out.println(CC);
		System.out.println(String.format("%6s", CC));

	}
	
}


결과 : 

Hello
 Hello

 

정리해보면 다음과 같습니다.

%3d : 정수를 3자리로 맞춘다.
%.3f : 소수점을 3자리로 맞춘다. (따라서 4번째 자리에서 반올림을 한다!!) -> 원래 반올림을 위한 메소드는 아니지만 이런 특성을 이용해 소수점의 경우 반올림으로 이용할 수도 있다.
%3s : 문자열을 3자리로 맞춘다.

이 외에도 %?x, %?o는 각각 16진수, 8진수를 표현할 수 있습니다.

단, 사용시 주의해야 할 점은 2개 이상의 값을 출력할 때 옵션으로 주는 부분을 각각 " " 로 묶으면 안 됩니다.

System.out.println(String.format("%4d", "%4d", AAA, BBB));    X
System.out.println(String.format("%4d, %4d", AAA, BBB));    O

 

 

Java (자바) String Formatting (문자열 포맷팅)과 파이썬 포맷팅을 비교해봅시다.

2020/05/05 - [개발자/Python] - Python (파이썬) String Formatting (문자열 포맷팅)

 

Python (파이썬) String Formatting (문자열 포맷팅)

포맷팅을 할 수 있는 방법에는 2가지가 있다. A = 4 B = 12 C = 'hi' D = 3.14159 print('%d %d %s %f' %(A,B,C,D)) print('{} {} {} {}' .format(A,B,C,D)) 결과 : 4 12 hi 3.141590 4 12 hi 3.14159 %f의 경우..

greendreamtrre.tistory.com

 

+ Recent posts