개발 의문 해결

java 사칙연산 결과값 소수점 딱 안 떨어지는 이유

티시즌 2023. 4. 28. 17:25

자바 for문 공부 중에 이런 예제 코드를 짰다.

package practice;

public class Chap0404 {
	public static void main(String[] args) {
		int sum = 0;
		for (int i=1; i <=100; i++) {
			sum = sum + i;
		}
		System.out.println("The sum of 1~100 (d=1): "+sum);
		
		double sumd = 0;
		for (double i=1; i <=10; i=i+0.1) {
			sumd = sumd + i;
		}
		System.out.println("The sum of 1~10 (d=0.1): "+sumd);
	}
}

결과가 각각 5050, 500.5가 나와야 하는데 잉?
5050과 500.49999999999966이 나오는 게 아닌가..?

아니 왜..?

ChatGPT에게 물어봤다.

아...
십진수 입력값을 이진수로 바꾸는 과정에서 데이터 손실이 발생한다고 한다.

컴퓨터는 이진수로 사고하니까 어떻게 할 수는 없고..
반올림을 통해서 문제를 해결할 수 있다.

관련해서 좋은 글이 있어서 공유한다.

https://devlog-wjdrbs96.tistory.com/254

 

[Java] float과 double의 차이는 무엇일까?

float vs double의 차이는? float과 double 모두 실수를 표현하기 위해 사용하는 자료형이라는 것은 알고 있을 것 입니다. 하지만 정확한 차이가 무엇이냐고 물어본다면 대답하기가 쉽지 않습니다...(애

devlog-wjdrbs96.tistory.com