출처 : https://man-wol.tistory.com/entry/01-02-03-false

console.log(0.1 + 0.2 === 0.3);

개발자 도구에 위와 같이 입력해 보면 이상하게 false 값이 나온다..?

결론부터 말하자면!

  1. 사람은 10진법, 컴퓨터는 2진법을 사용한다.
  2. 10진수에서 2진수로 변환했을 때, 무한 소수인 경우가 있다.
  3. 무한 소수인 경우에 입력받은 10진수 값에 가장 근사값이 되도록 반올림 한 값으로 저장된다.
  4. 0.1, 0.2, 0.3은 모두 2진법으로 변환했을 때, 무한 소수이다.
  5. 0.1과 0.2를 변환하면서 생긴 오차 때문에, 0.1과 0.2를 각각 2진수로 변환하고 합한 값과 0.3을 2진수로 변환한 값 간에 오차가 생긴다.
  6. 때문에, 0.1 + 0.2 === 0.3은 같지 않게 된다.

이러한 이유는..

사람은 10진법을 사용하고, 컴퓨터는 2진법을 사용하기 때문에 일어나는 일이다. 사람이 10진법으로 표현(입력)하면, 컴퓨터는 2진법으로 사용(변환 / 저장)한다.

10진수를 2진수로 변환하면서 생기는 일..!

정수를 2진수로 변환할 때는 변환된 후에도 정수로 딱 떨어져 문제가 없다!

https://blog.kakaocdn.net/dn/b2HlOk/btrkYfCD7SP/f1yFo4AwqpxYlvjL3hJV2K/img.png

하지만 소수의 경우에는 아래와 같이 유한 소수로 변환되는 경우가 있는 반면,

https://blog.kakaocdn.net/dn/bTCMA3/btrkHpmKP4z/lZtfW68s4RNTEWqVMKkey1/img.png

아래와 같이 무한 소수로 변환되는 경우도 있다.

https://blog.kakaocdn.net/dn/DsZra/btrkPIrykSY/h89D4beHPGt2mZ9kX2uIAK/img.png