Java 반올림, 내림, 올림 - round, ceil, floor






결과

결과





코드

public static void main(String[] args) {
		double num = 3.14;
		System.out.println("절대값 : " + Math.abs(num*-1));
		
		System.out.println("올림 : " + Math.ceil(num));
		System.out.println("내림 : " + Math.floor(num));
		
		System.out.println("반올림 : " + Math.round(num));
		System.out.println("소수점 아래 2째에서 반올림 : " + Math.round(num*10)/10.0);
	
	}





Math 메소드


int abs(int num) | double abs(double num) : 절대값을 얻는다.

- int형 double형 둘다 사용할 수 있다.


- 절대값이므로 양수일 때는 그대로며 음수일 때는 -1을 곱한 결과와 같다.





double ceil(double num) : 올림값을 얻는다.

- 올림값을 얻어 double형으로 리턴해준다.





double floor(double num) : 내림값을 얻는다.

- 내림값을 얻어 double형으로 리턴해준다.





long round(double num) : 반올림 값을 얻는다.

- 넘겨받은 값을 반올림하여 long형으로 리턴한다.


- round() 메소드는 항상 소수점 1째 자리에서 반올림해준다.


- 소수점 아래 n번 째에서 반올림을 시도하고자 한다면 먼저 10n-1를 곱해준 후 round로 반올림한다.

그리고 다시 10n-1을 나누어줌으로써 얻을 수 있다.


 주의할점으로는 round의 리턴형이 long이므로 이를 int형으로 나누어 버리면는 변수가 정수형이되어버린다.

따라서, 위에서 코드를 보면 10.0 나누어준 것처럼 Double형으로 나누어줌으로써 Double형으로 자동 형변환이 일어나도록하여야 소수점 아래 값들을 얻을 수 있다.





Java StringBuilder, StringBuffer




결과

결과





코드

public static void main(String[] args) {
		StringBuilder sb = new StringBuilder();	// 초기화
		sb.append("abcd");	// abcd
		sb.insert(2, "zzzz");	// abzzzzcd
		sb.delete(6,8);			// abzzzz
		sb.replace(0, 2,  "xxxx");	// xxxxzzzz
		sb.reverse();	// zzzzxxxx
		sb.setCharAt(4, 'y');	// zzzzyxxx
		
		String s = sb.toString();
		String s2 = sb.substring(5);
		
		System.out.println("String : " + s);
		System.out.println("String2 : " + s2);
		
	}





StringBuilder()

이미지1

- String은 덧셈 연산처럼 수정하였을 때는 이미지1 처럼 기존의 String 객체를 수정하는 것이 아니라 수정한 새 String 객체를 만들어 연결한다.


- 위 같은 과정이 빈번히 반복되다보면 쓰레기 객체가 늘어나 성능을 안좋게 한다.


- 때문의 StringBuilder를 사용하면 버퍼(데이터를 임시로 저장)에 문자열을 저장, 추가, 수정, 삭제 작업을 추가적인 객체를 생성않으며 할 수 있다.


- 사용할 수 있는 메소드는 String에서도 있는 replace, substring들도 있다. 그리고 append, delete, insert와 같은 추가, 삭제하는 메소드들이 있다.


- 수정 작업이 끝난 후 String 변수에 저장하고자 하면은 toString()을 사용하면 된다.





StringBuffer() vs. StringBuilder()

- StringBuffer()와 StringBuilder()의 사용법은 동일하다.


- 단, StringBuffer()은 멀티 스레드 환경에서 사용할 수 있어 스레드에 safe(안전)하다.


- 반면에 StringBuilder()는 단일 스레드 환경에서 사용하도록 설계되어있다.


- 멀티 스레드 환경이 아니라면 StringBuilder()를 사용하는 것이 더 성능이 좋다.





참조

https://docs.oracle.com/javase/7/docs/api/java/lang/StringBuilder.html


https://docs.oracle.com/javase/7/docs/api/java/lang/StringBuffer.html







+ Recent posts