이 예제의 실행결과를 먼저 살펴보면 다음과 같다.
/*
= 소수점 3째자리 이하 버림 =
123.45678 * 100 = 12345.678
(int)(123.45678 * 100) = 12345
(int)(123.45678 * 100) / 100.0 = 123.45
= 소수점 3째자리 이하 반올림 =
123.45678 * 100 = 12345.678
(int)(123.45678 * 100 + 0.5) = 12346
(int)(123.45678 * 100 + 0.5) / 100.0 = 123.46
= 소수점 3째자리 이하 반올림(DecimalFormat클래스이용) =
123.46
*/
기본이론은 실수형값을 정수형으로 형변환함으로써 자리수를 잘라내는 것이다.
실수형이 정수형으로 변환되면, 소수점이하의 자리수는 모두 버리게 된다.
이 성질을 이용해서 10의 제곱으로 곱하고 나누면, 원하는 자리수 이하는 없어진다.
예제에서 처럼 소수점 2자리까지 구하고 싶으면 10의 2제곱으로 곱하고 나누면 되고
3자리라면 10의 3제곱으로 곱하고 나누면 된다.
반올림의 경우 10의 제곱값을 곱한값에 0.5를 더하는 과정을 추가하면 된다.
자바에서는 이 과정을 간단하게 처리할 수 있는 DecimalFormat클래스를 제공한다.
10의 제곱을 곱하고 나눠서 처리하는 방법은 이해하는 정도로 하고, 실전에서는
DecimalFormat클래스를 사용하면 좋을 것이다.
import java.text.DecimalFormat;
class DecimalPoint
{
public static void main(String[] args)
{
double value = 123.45678;
System.out.println(" = 소수점 3째자리 이하 버림 = ");
System.out.println(value + " * 100 = " +(value*100));
System.out.println("(int)("+ value + " * 100) = " + (int)(value*100));
System.out.println("(int)("+ value + " * 100) / 100.0 = " + (int)(value*100)/100.0);
System.out.println(value + "/ 100 * 100 = " +(value/100*100));
System.out.println();
System.out.println(" = 소수점 3째자리 이하 반올림 = ");
System.out.println(value + " * 100 = " +(value*100));
System.out.println("(int)("+ value + " * 100 + 0.5) = " + (int)(value*100+0.5));
System.out.println("(int)("+ value + " * 100 + 0.5) / 100.0 = " + (int)(value*100+0.5)/100.0);
System.out.println();
System.out.println(" = 소수점 3째자리 이하 반올림(DecimalFormat클래스이용) = ");
DecimalFormat df = new DecimalFormat("#.##");
System.out.println(df.format(value));
}
}
/*
= 소수점 3째자리 이하 버림 =
123.45678 * 100 = 12345.678
(int)(123.45678 * 100) = 12345
(int)(123.45678 * 100) / 100.0 = 123.45
= 소수점 3째자리 이하 반올림 =
123.45678 * 100 = 12345.678
(int)(123.45678 * 100 + 0.5) = 12346
(int)(123.45678 * 100 + 0.5) / 100.0 = 123.46
= 소수점 3째자리 이하 반올림(DecimalFormat클래스이용) =
123.46
*/
카페 게시글
◆ 자바소스강좌
소수점 자리수 조절하기 - 버림, 반올림의 원리, DecimalFormat클래스 이용
자바짱
추천 0
조회 16,957
04.07.29 10:39
댓글 3
다음검색
첫댓글 단순히 DecimalFormat클래스의 이용방법만을 알아도 되지만, 여러분들의 값을 다루는 능력을 향상시키는데 도움이 될 것이라고 생각해서 그 원리를 함께 적었습니다.
Quiz) 위의 예제에서 버림과 반올림을 하는 방법이 나와 있는데, 올림을 하려면 어떻게 해야할까요? 한번 생각해보시기 바랍니다.
잘보고 갑니다~ 떙스~^^