본문 바로가기
자바 풀스택 공부

프로그래밍 언어에서 1 + 0.1이 1.1이 아닌 이유

by seung_nari 2021. 12. 31.

https://wakestand.tistory.com/203

 

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

자바에서 소수점 계산 시 콘솔창 아래줄과 같이 값이 이상하게 나오는 경우가 있는데 IEEE 754 부동 소수점 방식으로 계산해서 저렇게 나오는 것이다 자세한 내용은 아래 글을 참조해주면 되고 프

wakestand.tistory.com

에서 참조했습니다.

public static void main(String[] args) {
		double val1 = 3.14;
		
		double result = val1 + 1.00;
		
		System.out.println(val1);
		System.out.println(result);
		
		float val2 = 3.14f;
		
		float result2 = val2 + 1;
		
		System.out.println(val2);
		System.out.println(result2);
}

이와 같이 소수점을 더 했을 경우 다른 값이 나오는 상황이 있습니다.

 

이런 상황은 오류가 아니라

 

각종 프로그래밍 언어에서는 소수를 표현할 때

IEEE 754 부동 소수점 방식으로 소수를 표현하게 되는데

 

부동 소수점 방식은 범위가 넓은 대신

값이 정확하게 떨어지지 않고

근사치만 제공해주게 된다.

 

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

 

BigDecimal은

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

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

 

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

 

public static void main(String[] args) {
		double val1 = 3.14;
		
		float val2 = 1f;
		
		BigDecimal c = new BigDecimal(String.valueOf(val1));
		BigDecimal d = new BigDecimal(String.valueOf(val2));
		
		System.out.println("더하기 : " + c.add(d));
		System.out.println("빼기 : " + c.subtract(d));
		System.out.println("곱하기 : " + c.multiply(d));
		System.out.println("나누기 : " + c.divide(d));
	}

 

 

 

'자바 풀스택 공부' 카테고리의 다른 글

Day 4.  (0) 2022.01.04
Day 3.  (0) 2022.01.04
Day 2-2.  (0) 2022.01.03
Day 2-1.  (0) 2021.12.31
Day 1.  (0) 2021.12.30

댓글