loading

프로그래밍/JAVA

[JAVA] 소수점 자릿수 반올림 및 속도비교

침착곰 2021. 5. 8. 16:25
반응형

안녕하세요

개발을 하면서 느끼지만 반올림, 내림, 올림 같이 소수점처리하는 방식은 할 때마다 까먹어서 맨날 구글링을 하는 느낌입니다 ㅠ

이번 포스팅에서는 자바에서 소수점 자릿수를 반올림하는 방법에 대해서 알아보겠습니다!

 


Math.Round()

Math.Round() 방식입니다.

제일 무난한 방식입니다.

이 방식은 계산식에서 반올림을 해야하는 경우 맞는 방식이라 할 수 있습니다

다른 언어에서는 몇 번째 소수점까지 지정해서 반올림을 할 수 있지만 하나의 파라미터를 넘겨서 첫 번째 단위로만 반올림이 가능합니다

예제

public class RoundingOff {
	public static void main(String[] args) {	
		float a = 3.1415926535f;
		
		System.out.println("첫 번째 : " + Math.round(a));
		System.out.println("두 번째 : " + Math.round(a*100) / 100.0);
		System.out.println("세 번째 : " + Math.round(a*10000) / 10000.0);
	}
}

 

결과 화면

첫 번째는 소수점 첫 번째 자릿수에서 반올림하여 3이 결과로 나왔습니다

두 번째는 소수점 세 번째 자릿수에서 반올림하여 3.14가 결과로 나왔습니다

소수점의 반올림을 하고 싶은 경우 100을 곱한 값을 반올림 한 후 100.0으로 실수를 나누어 구해줘야합니다

세 번째는 소수점 다섯 번째 자릿수에서 반올림하여 3.1416이 결과로 나왔습니다

 


String.Format()

두 번째 방법은 String.Format() 방식입니다

이 방법은 결과화면을 String형태로 받고 싶은 경우 맞는 방법입니다

 

예제

String.Format의 첫 번째 파라미터는 String으로 변환 시 포맷을 입력합니다

두 번째 파라미터를 값을 넘겨주면 됩니다

public class RoundingOff {
	public static void main(String[] args) {	
		float a = 3.1415926535f;
		
		System.out.println("첫 번째 : " + String.format("%.0f", a));
		System.out.println("두 번째 : " + String.format("%.2f", a));
		System.out.println("세 번째 : " + String.format("%.4f", a));
	}
}

 

결과 화면

첫 번째 방식은 "%.0f"를 하여 첫 번째 소수점자리수에서 반올림을 한 결과가 나옵니다

두 번째 방식은 "%.2f"를 하여 세 번째 소수점자리수에서 반올림을 한 결과가 나옵니다

세 번째 방식은 "%.4f"를 하여 다섯 번째 소수점자리수에서 반올림을 한 결과가 나옵니다

 


 

 

속도 비교

두 개의 메소드를 10000번 돌렸을 때의 속도비교입니다

public class RoundingOff {
	public static void main(String[] args) {	
		float a = 3.1415926535f;
		float fl;
		String str;
		
		long startTime = System.currentTimeMillis();
		for(int i = 0; i < 10000; i++) {
			str = String.format("%.0f", a);
		}
		long step1 = System.currentTimeMillis(); 
		System.out.println((step1-startTime) + "(ms)");

		long step2 = System.currentTimeMillis(); 
		for(int i = 0; i < 10000; i++) {
			fl = Math.round(a);
		}
		long step3 = System.currentTimeMillis(); 	
		System.out.println((step3-step2) + "(ms)");		
	}
}

 

결과

속도는 Math.round방식이 String.format 방식보다 더 빠른 것을 볼 수 있습니다

만약 대용량의 계산을 수행하는 경우에는 Math.round 방식을 쓰는 것이 더 좋을 것 같습니다

 


 

여기까지 자바에서 Math.Round와 String.format을 사용하여 소수점 반올림을 하는 방법에 대해서 알아봤습니다

만약 틀린 부분이 있다면 댓글 부탁드립니다!!

자바를 공부하는 분들께 제 포스팅이 도움이 되었으면 좋겠습니다

반응형
그리드형