FrontEnd/JavaScript

0.1+0.2 = 0.3이 아니다? - 부정확한 계산

CoderHan 2023. 1. 30. 13:35
반응형

자바스크립트를 포함한 다른 언어에서도 발생하는 현상이다.

10진수로 표현한 0.1과 0.2를 더하면 우리는 쉽게 0.3을 계산할 수 있지만

컴퓨터는 이진수로 숫자를 기억하기 떄문에 발생하는 오차이다.

 

이진수로 이루어진 숫자는 0과 1로 구성되어 0.1,0.2같은 분수는

이진법으로 표현하면 무한 소수가 됩니다.

1/3을 십진법으로 표현하면 0.3333...이 되는 것 처럼요.

 

10진법에서 1/3을 정확하게 나타낼 수 없듯이, 2진법을 사용해 0.1과 0.2를 정확하게 저장하는 방법은 없습니다.

 

이 문제를 어떻게 해결할까요?

가장 신뢰할만한 방법은 toFixed() 메서드를 사용해 어림수를 만들면 됩니다.

toFixed()함수는 숫자를 전달받아 괄호 안에 인수만큼 소숫점자리수까지 계산한 뒤 반올림하여 문자열로 나타내줍니다.

 

let sum = 0.1 + 0.2;
alert( sum.toFixed(2) ); // 0.30

0.1과 0.2를 더한 sum을 전달받아 toFixed(2)메서드를 사용하면 소수점 두번째 자리인 0.30까지 문자열로 반환합니다.

이때 문자열을 숫자로 바꾸기 위해서 +단항 연산자를 사용하면 오차없이 0.1+0.2의 값을 얻을 수 있습니다.

 

이외에 10의 제곱인 숫자를 곱한 뒤 계산하여 다시 나눠주는 방법도 있지만 나눗셈이 들어가기 때문에 소수가 다시 등장할

수 있는 단점이 있습니다. 더욱 자세한 내용을 알고싶으시다면 아래 링크를 참조해주세요

 

https://ko.javascript.info/number#ref-709

반응형