본문 바로가기
Error & Fix

자바 소수 오차 없이 계산 및 사칙연산 방법

by wakestand 2020. 2. 27.
반응형

자바에서 소수점 계산 시

콘솔창 아래줄과 같이

값이 이상하게 나오는 경우가 있는데

 

IEEE 754 부동 소수점 방식으로 계산해서 저렇게 나오는 것이다

자세한 내용은 아래 글을 참조해주면 되고

 

프로그래밍 언어에서 0.1 + 0.2 = 0.3이 아닌 이유

Double 타입의 변수 a와 b에 0.1, 0.2를 넣고 더해봤더니 0.1 + 0.2인데 0.3이 나오는 것이 아니라 0.30000000000000004 가 나오는 것이 보인다 이게 뭐지? 버근가? 싶을텐데 컴퓨터는 모든 숫자를 0과 1로만(2진..

wakestand.tistory.com

실제 소수 계산시에는 정밀도를 보정해주는 BigDecimal을 사용해야 한다

 

BigDecimal은 

BigDecimal 변수명 = new BigDecimal("값");

이런 식으로 선언 및 초기화를 하는데

 

값은 반드시 숫자가 아닌 문자 타입으로 넣어줘야 한다

숫자로 넣으면 값이 이상하게 나온다

 

BigDecimal을 이용한 사칙연산은 다음과 같다

 

더하기

BigDecimal명.add(BigDecimal타입 변수);

 

빼기

BigDecimal명.subtract(BigDecimal타입 변수);

 

곱하기

BigDecimal명.multiply(BigDecimal타입 변수);

 

나누기

BigDecimal명.divide(BigDecimal타입 변수);

 

예제에 사용한 코드는 아래와 같다

 

package algorith;

import java.math.BigDecimal;

public class PlusExample {

	public static void main(String[] args) {
		Double a = 0.1;
		Double b = 0.2;
		
		// BigDecimal에 숫자 넣을때에는 문자로 넣을 것
		BigDecimal c = new BigDecimal(String.valueOf(a));
		BigDecimal d = new BigDecimal(String.valueOf(b));
		
		System.out.println("더하기 : "  + c.add(d));
		System.out.println("빼기 : "  + c.subtract(d));
		System.out.println("곱하기 : "  + c.multiply(d));
		System.out.println("나누기 : "  + c.divide(d, 3));
		
	}

}
반응형

댓글