2021-01-31
double 형 타입의 변수를 사용하다 보면 자신의 필요에 따라 특정 소수점 자리를 제거해야 하는 경우가 있는데, 방법을 모를 경우 상당히 난감할 수가 있다. 따라서 오늘은 이와 같은 소수점 자릿수를 처리하는 방법을 알아보자.
(방법은 3가지를 소개하며, 모두 둘째자리에서 반올림을 기준으로 한다.)
방법 1. Math.round()
package dDoubleCutMethod;
public class main {
public static void main(String[] args) {
//자바에서 소숫점을 반올림해서 원하는 자릿수 얻는 방법
double num = 123.4567891011;
////////////////////////////////////////////////////////////////////////////
// 방법 1. Math.round
double test = Math.round(num);
System.out.println(test);
// 라운드는 소숫점 첫째자리 기준으로 모두 올리거나 내리는 메서드이다.
// 이를 활용해서 소숫점을 반올림하는 것이다.
double result1 = Math.round(num * 100) / 100.0;
System.out.println(result1);
// 둘째자리만 나타낼것이기 때문에 100을 곱해주고
//차후에 100.0을 나누어 준다.
// 100으로 나누어주면 인트형으로 소숫점이 모두 0으로 리턴되기 때문에
//100.0 을 나누어 주어야 한다.
}
}
아마 가장 많이 알려진 방법이 아닐까 생각해보는데, Math에서 제공하는 round 메서드를 사용하는 것이다. 해당 메서드는 소수점 첫째 자리 기준으로 모두 올리거나 내리는 메서드인데, 이를 이용해 먼저 100을 곱해주고 이후 100.0을 나누어 주면, 소수점 둘째 자리까지 출력할 수 있다. (100이 아닌 100.0을 나누어 주는 이유는 double형으로 리턴해주기 위해서이다. ) 출력결과는 아래와 같다.
방법2. String.format()
package dDoubleCutMethod;
public class main {
public static void main(String[] args) {
//자바에서 소숫점을 반올림해서 원하는 자릿수 얻는 방법
double num = 123.4567891011;
////////////////////////////////////////////////////////////////////////////
// 방법 2. String.format
String result2 = String.format("%.2f", num);
System.out.println(result2);
// 두번째 방법은 String의 format 메서드를 활용하는 방법으로 매개값으로
// 출력하고싶은 형태와 출력할 변수 순으로 넣어주면 된다.
// 다만 리턴값은 String이기 때문에 String 변수에 담아주어야한다.
System.out.printf("%.2f", num);
// 물로 바로 printf로 출력하는 방법도 가능하다.
// 단점으로는 return 값을 저장할 수 없다는 점이다.
System.out.println();
}
}
다음 방법은 String에서 제공하는 format 메서드를 이용하는 것이다. 매개 변수로는 자신의 원하는 출력 형태를 넣어준 후, 다음 매개변수로 double 형 변수를 넣어 주면 된다. 우선 소수점 둘째 자리까지 출력하는 예제이기 때문에 "%. 2f"를 매개 변수로 넣어 주었다. 출력 결과는 아래와 같다. ( 단순히 리턴값이 필요하지 않고 출력만 하는 경우라면 printf를 통해서 출력해주는 것도 결과는 같으니 상황에 따라 사용하면 된다.)
방법 3. DecimalFormat 클래스
package dDoubleCutMethod;
import java.text.DecimalFormat;
public class main {
public static void main(String[] args) {
//자바에서 소숫점을 반올림해서 원하는 자릿수 얻는 방법
double num = 123.4567891011;
////////////////////////////////////////////////////////////////////////////
// 방법 3. DecimalFormat 클래스 활용하기
DecimalFormat df = new DecimalFormat("0.00");
//DecimalFormat df = new DecimalFormat("#.##");
// 0.00 과 #.## 모두 가능하나 둘의 차이점은 만약에 1.1일 경우
// 0.00 은 나머지 0의 자리를 절삭해 1.1만 출력하지만
//#.##은 0을 절삭하지 않아
// 1.10을 출력한다.
String result3 = df.format(num);
//역시 리턴값이 String이기 때문에 String 변수에 담아주면 된다.
System.out.println(result3);
}
}
마지막은 DecimalFormat 클래스를 사용하는 것이다. 클래스 이름에서도 느껴지듯이 다양한 형태의 숫자형 포맷을 출력할 수 있도록 도와주는 클래스이다. 소수점 둘째 자리까지 출력하고 싶다면 위의 코드와 같이 "0.00" 또는 "#.##"의 형태로 매개 변수를 주면 된다. 소수점을 더출력하고 싶으면 '0'이나 '#'을 추가하는 방식으로 사용하면 되며, '0'과 '#' 두가지 기호의 차이는 주석에도 적어두었듯이 0의 절삭 여부이다. 출력 결과는 아래와 같다.
DecimalFormat 에 대하여 궁금하면, 아래 글을 확인해 보자.