티스토리 뷰
[JS] 소수점 계산 오류 해결법 (부동 소수점)
JoonPyo-Hong 2021. 7. 30. 16:54반응형
자바스크립트(javaScript)의 소수점 연산에서 오류가 발생했다.
var a = 0.1;
var b = 0.2;
console.log(a + b); // 0.30000000000000004
0.3을 예상했지만 0.30000000000000004가 출력됬다.
원인
자바스크립트(javaScript)뿐만 아니라 Java, C, Python, Oracle .. 에서도 계산 오류가 발생한다.
우리가 보통 계산 할때 사용하는 10진법과 달리 컴퓨터는 2진법으로 동작하는데,
몇몇 소수는 10진법에서 2진법으로 변환하는 과정에서 무한 소수가 되어버린다.
저장공간에 한계가 있는 컴퓨터는 무한 소수를 유한 소수로 바꾸게 되는데,
이 과정에서 미세한 오차가 발생해서 오류가 발생한 것이다. (정밀도 문제)
미세한 값들이 손실되거나 초과된다. (위에서 0000000000000004에 해당)
해결방법
반올림 함수로 해결한다.
toFixed()
var a = 0.1;
var b = 0.2;
var result = (a + b).toFixed(1);
console.log(result); // 0.3
toFixed(1) - 소숫점 첫째자리까지 반올림 처리
toFixed(2) - 소숫점 둘째자리까지 반올림 처리
toFixed(3) - 소숫점 셋째자리까지 반올림 처리
Math.round()
var a = 0.1;
var b = 0.2;
var result = Math.round((0.1+0.2)*10)/10;
console.log(result); // 0.3
Math.round((a+b)*10)/10 - 소숫점 첫째자리까지 반올림 처리
Math.round((a+b)*100)/100 - 소숫점 둘째자리까지 반올림 처리
Math.round((a+b)*1000)/1000 - 소숫점 셋째자리까지 반올림 처리
반응형
'[JS]' 카테고리의 다른 글
[JS] javaScript 형변환 (숫자를 문자로, 문자를 숫자로) + typeof (5) | 2021.08.02 |
---|---|
[JS] 웹 페이지 HTML 렌더링 순서, CSS 파일 head안에 넣는 이유, Script 파일 body안에 넣는 이유 (10) | 2021.07.31 |
[JS] jQuery에서 remove, detach, empty 차이 (11) | 2021.07.29 |
[JS] disabled, readonly 사용법과 차이점 (8) | 2021.07.28 |
[JS] jQuery is not defined, $ is not defined 오류 (1) | 2021.07.27 |
댓글
반응형