티스토리 뷰

반응형

자바스크립트(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 - 소숫점 셋째자리까지 반올림 처리

반응형
댓글
반응형