Java Script에서 소수점 계산 시 오류가 발생할 수 있다.
let x = 0.1 + 0.2;
console.log(x);
당연히 x는 0.3으로 결과가 출력될 것 같지만 실제로는 0.30000000000000004가 출력된다.
이는 10진법에서 2진법으로 바꿔 계산하는 과정에서 발생하는 것으로 무한소수와 유한소수의 차이점에서 나타난다.
무한소수는 말그대로 소수가 끝나지 않는 것으로 64비트를 사용하는 Java Script에서는 숫자가 넘치게 된다.
console.log((0.1).toString(10));
console.log((0.1).toString(2));
0.1
0.0001100110011001100110011001100110011001100110011001101
이러한 차이점이다. 그래서 반올림처럼 근사값으로 값을 나타내준다.
처음으로 돌아가 x 값이 0.30000000000000004 되는 것이다.
하지만 64비트 모두 숫자가 저장되는 것은 아니다.
첫 비트는 음수와 양수를 표시하는 비트이고, 11비트는 지수부, 52비트는 가수부를 표현하는 비트이다.
따라서 실제 표현할 수 있는 값은 64비트의 최대치보다 작다.
이런 문제를 해결하기 위해서는 외부 라이브러리를 사용할 수 있다.
BigNumber.js, Big.js, Decimal.js
'프로그래밍 > Java Script' 카테고리의 다른 글
| Java Script - 조건문 if else, switch (0) | 2022.12.05 |
|---|---|
| Java Script - 연산자 Operator (0) | 2022.12.05 |
| Java Script - 데이터 타입 string, number, object, array, boolean, typeof (0) | 2022.12.03 |
| Java Script - 변수 var, let, const (0) | 2022.12.03 |
| Java Script - 콘솔, 주석 console, comment (0) | 2022.12.02 |