커뮤니티
변수값에 소수점이 잔뜩 찍히는 문제
2015-06-11 15:24:22
121
글번호 87106
제가 다음과 같이 프로그램을 짜서 실행시켜 보았는데, 결과값을 보면 이상하게 소수점 이하에 값이 잔뜩 찍히는 경우가 있습니다.
function Main_OnStart()
{
var a=120.45, b=120.46;
var c, d, e;
c = 130.46;
d = a+10;
e = b+10;
Main.MessageList(a, b, c, d, e);
if (c == e)
Main.MessageList("true");
else
Main.MessageList("false");
}
실행한 결과==========>
120.45 120.46 130.46 130.45 130.4599999999999998
false
위 결과값에서 a, b, c, d 는 정상적으로 값이 찍히는데 유독 e 만 130.46으로 찍히지 않고 이상하게 소수점 형태로 찍히더군요.
근데, 문제는 수식을 짤 때 저렇게 소수점 형태로 찍히는 경우가 상당히 많아서 if 문같은 비교 수식에서 엉터리 결과를 내는 경우가 아주 많다는 겁니다.
위에서 예를든 경우에도 상식적으로 c와 e는 같은 값을 가질거라고 예상되어 true 가 나와야 되는데 false 가 나와서 비교수식이 오작동하는 경우가 많습니다.
전략도 당연히 엉터리로 돌죠.
이게 자바스크립트 언어 자체가 갖고 있는 오류인가요? 아니면 예스스팟의 오류인가요?
이런 경우에 어떻게 대처해야하는지 참 난감합니다.
어떤 경우에 소수점이 잔뜩 찍힌 형태로 값이 나오는지 감도 못잡겠고요. 대처가 안됩니다 ㅠㅠ
혹시 이런 경우 접하신 적 있으신지? 도와주세요.
답변 1
예스스탁 예스스탁 답변
2015-06-11 16:04:46
안녕하세요
예스스탁입니다.
해당 내용은 컴퓨터의 부동소숫점 오류입니다.
자바스크립트에서만 발생하는 내용은 아니면 사용되는 모든 컴퓨터언어에서 발생합니다.,
인터넷에 부동소숫점 오류로 검색하시면 많은 글 보실수 있습니다.
컴퓨터에서 계산을 할때 숫자를 2진수로 변경해서 계산후 10진수로 돌려주게 되는데 이때 발생하는 내용입니다.
리턴값이 130.45999999999 나올수도 있고 130.4600000000001과 같이 리턴될수도 있습니다.
아래와 같이 자바스크립트의 기본 함수인 toFixed를 이용해 해결하실수도 있습니다.
function Main_OnStart()
{
var a=120.45, b=120.46;
var c, d, e;
c = 130.46;
d = a+10;
e = b+10;
Main.MessageList(a, b, c, d, e);
if (c.toFixed(2) == e.toFixed(2))
Main.MessageList("true");
else
Main.MessageList("false");
}
언어별로 부동소숫점 오류를 해결하는 방법이 여러가지 들이 있습니다.
구글등에서 자바스크립트 부동소숫점 오류로 검색하시면 여러가지 글들 있습니다.
즐거운 하루되세요
> 김태희 님이 쓴 글입니다.
> 제목 : 변수값에 소수점이 잔뜩 찍히는 문제
> 제가 다음과 같이 프로그램을 짜서 실행시켜 보았는데, 결과값을 보면 이상하게 소수점 이하에 값이 잔뜩 찍히는 경우가 있습니다.
function Main_OnStart()
{
var a=120.45, b=120.46;
var c, d, e;
c = 130.46;
d = a+10;
e = b+10;
Main.MessageList(a, b, c, d, e);
if (c == e)
Main.MessageList("true");
else
Main.MessageList("false");
}
실행한 결과==========>
120.45 120.46 130.46 130.45 130.4599999999999998
false
위 결과값에서 a, b, c, d 는 정상적으로 값이 찍히는데 유독 e 만 130.46으로 찍히지 않고 이상하게 소수점 형태로 찍히더군요.
근데, 문제는 수식을 짤 때 저렇게 소수점 형태로 찍히는 경우가 상당히 많아서 if 문같은 비교 수식에서 엉터리 결과를 내는 경우가 아주 많다는 겁니다.
위에서 예를든 경우에도 상식적으로 c와 e는 같은 값을 가질거라고 예상되어 true 가 나와야 되는데 false 가 나와서 비교수식이 오작동하는 경우가 많습니다.
전략도 당연히 엉터리로 돌죠.
이게 자바스크립트 언어 자체가 갖고 있는 오류인가요? 아니면 예스스팟의 오류인가요?
이런 경우에 어떻게 대처해야하는지 참 난감합니다.
어떤 경우에 소수점이 잔뜩 찍힌 형태로 값이 나오는지 감도 못잡겠고요. 대처가 안됩니다 ㅠㅠ
혹시 이런 경우 접하신 적 있으신지? 도와주세요.
다음글
이전글