본문 바로가기
학습/Java

실수 소수점 다루기 ( Math & String.format)

코동이 2020. 10. 22.
목차
1. 소수점을 나타내는 JAVA의 자료형은? ( float, double )
2. 소수점 자르는 함수
1)  Math.round() , Math.ceil() , Math.floor()
2) String.format

 

코딩테스트를 풀던 중, 시간 계산과 관련한 문제들이 많이 등장한다. 소수점은 몇자리까지 필요한지, 나타내야 하는 실수는 어떤 형태인지 자유자재로 다루는 기술이 필요하다. 자바에서 제공하는 소수점과 관련한 함수들을 살펴보고 필요한 것을 골라 써보자.

 

 

1. float vs double

실수 형을 나타내는 데이터 타입은 float, double 2가지 종류가 있다. 세세한 기능과 원리의 비교보다는 소수점을 다루는 관점에서 살펴보고자 한다. 크게 구분하는 방법은 소수점 자리의 표현 갯수이다. float는 7자리, double은 16자리까지 가능하다. 유의할 점은 float를 사용할 때 꼭 뒤에 f를 붙여주어야 한다. 실수형을 다룰 때 기본으로 double형인 d가 default로 인식된다. 따라서 double은 뒤에 d를 붙이지 않아도 오류가 나지 않지만 float는 f를 붙이지 않으면 데이터 타입이 맞지 않아 오류가 난다.

public static void main(String[] args) {
	// TODO Auto-generated method stub
	float pie1 = 3.14; //오류!!!
	float pie2 = 3.14f;
		
	double pie3 = 3.14;
	double pie4 = 3.14d;
}

 

 

2. Math.round(), Math.ceil(), Math.floor()

Math.round() : 반올림

Math.ceil() : 올림

Math.floor() : 버림

 

본격적으로 소수점을 자르는 방법을 알아보자. Math는 3가지 종류를 가지고 있다. 

public static void main(String[] args) {
	// TODO Auto-generated method stub
	double pie = 3.1494949498;
		
	System.out.println(Math.round(pie)); // 3
	System.out.println(Math.round(pie*100)/100.0); //3.15
	System.out.println(Math.ceil(pie*100)/100.0); //3.15
	System.out.println(Math.floor(pie*100)/100.0); //3.14
}

소수점 둘째자리 까지만 자르고 싶다면 Math함수의 매개변수 안에 100을 곱하고 그 값을 다시 100.0으로 나눈다. 100.0인 이유는 Math함수가 long으로 return 받기 때문에 실수형으로 만들어 주기 위해 100.0으로 나눈다. 특히 주의할 것은 Math.floor만 3.14이고 round와 ceil은 3.15이다. 주의해야 하는 이유는 String.format으로 소수점을 자르면 자동 반올림이 되기 때문에 주심해아한다.

 

3. String.format

String.format은 비단 소수점이 아니라 정수형, 실수형, 주소 등 다양한 형태를 출력할 수 있다. 다시 위의 결과에 String.format만 출력해 보겠다.

public static void main(String[] args) {
	// TODO Auto-generated method stub
	double pie = 3.1494949498;
		
	System.out.println(Math.round(pie)); // 3
	System.out.println(Math.round(pie*100)/100.0); //3.15
	System.out.println(Math.ceil(pie*100)/100.0); //3.15
	System.out.println(Math.floor(pie*100)/100.0); //3.14
	System.out.println(String.format("%.2f", pie)); //3.15
}

  자동으로 반올림이 되어 3.15가 된 것을 볼 수 있다. 무턱대로 소수점을 자르다가 다른 값을 반환 받을 수 있다. 따라서 실수형의 소수점을 자르고 싶다면 되도록 Math.round()를 이용하는 것을 추천한다.

 

%s : 문자열 그대로 출력 String.format("%s","hello"); hello
%10s : 문자열 총 10자리이며 없으면 왼쪽은 공백이다 String.format("%10s","hello");      hello
%-10s : 문자열 총 10자리이며 없으면 오른쪽은 공백이다 String.format("%10s","hello"); hello     //여기까지 출력        
%d : 정수형 그대로 출력 String.format("%d", 10); 10
%5d : 총 5자리이며 없으면 왼쪽 공백 String.format("%5d", 10);     10
%05d : 총5자라이며 없으면 왼쪽 0 String.format("%05d",10); 00010
%f : 실수형 그대로 출력 String.format("%f",3.149494f); 3.149494
%.2f : 실수형 소수 둘째자리까지 출력 String.format("%.2f",3.149494f); 3.15
%10.2f : 문자열 총 10자리이며 소수 둘째자리까지 출력 String.format("%10.2f",3.149494f);        3.15

 

특히 시간을 String.format()으로 만들기 편하다.

"%02d"를 이용해 String.format("%02d", 5); => 05

반응형

'학습 > Java' 카테고리의 다른 글

Java에서 static 사용하면 안되는 이유  (0) 2021.01.25
Front-End와 Back-End 연계하기  (0) 2020.12.22
Map에서 Key, Value 다루기  (0) 2020.11.02
자바 시간 Millisecond 다루기  (0) 2020.10.23
JDK JRE JVM  (0) 2019.02.17