자바스크립트 정수가 소수로 표현되는 이유 : 부동소수점

2026. 2. 19. 15:40Frontend

1. 배경

한 항목 수익률을 구하기 위해 퍼센티지 계산을 했다.

0.2814 * 100
> 28.139999999999997

28.14%가 아닌 다른 값을 반환했다.

 

2. 문제 확인

자바스크립트는 숫자를 64비트 형식(IEEE-754)으로 표현한다.

64 비트 중
- 52비트는 유효 숫자를
- 11비트는 지수를
- 1비트는 부호 저장한다

0.1 ≈ 0.10000000000000000555...
0.2 ≈ 0.20000000000000001110...

위 예시처럼
자바스크립트 숫자(부동소수점)는 근사치로 표현된다.

정수 또한 부동소수점으로 저장되며,
가끔 2진수로 정확히 표현되지 않는 숫자는 근사치로 저장된다.

0.2814 * 100 === 28.14
> false

부동소수점의 구조적 한계로 계산에서 불일치가 발생하는 것이 원인이었다.

 

참고
- 배정밀도 부동소수점수 — 위키백과