커뮤니티

Round함수가 좀 이상 문의좀 합니다.

프로필 이미지
와신상담
2012-04-25 16:34:32
402
글번호 50493
답변완료

첨부 이미지

어떨결에 발견한건데 첨부화일에 그림좀 봐주세요 MessageLog("Round(327.275, 2) [%.3f]", Round(327.275, 2)); MessageLog("Round(328.275, 2) [%.3f]", Round(328.275, 2)); 2자리까지 반올림한다면 두값은 각각 327.28, 328.28 나와야 되지 않을까요? 그런데 첫번째건 첨부파일에서 처럼 327.27로 나오네요. 328 이상부터는 위의 소수점이 반올림이 되는데 미만은 반올림이 안되요 확인좀 부탁드립니다.
지표
답변 1
프로필 이미지

예스스탁 예스스탁 답변

2012-04-26 10:32:35

안녕하세요 예스스탁입니다. 해당 내용은 근본적으로 예스랭귀지 문제는 아니며 컴퓨터 프로세서가 실수를 부동소수점형태의 테이터 표현방식을 사용함으로 인해서 소수를 이진수로 변환하는 과정에서 생기는 문제로 대부분의 컴퓨터에서 수식 계산시에 동일하게 일어나는 문제입니다. 이는 컴퓨터자체의 부동소숫점 계산 오류로 인터넷에서 해당 내용 검색하시면 여러 글들 보실 수 있습니다. 예를 들어 327.275라는 값을 2진수로 변환해 계산해서 다시 10진수로 돌려주게 되는데 이때 값을 327.2744444444444444449와 같이 인지를 하게 되고 이값을 반올림하게 되므로 327.27이라는 값으로 도출이 되는 것입니다. 수식에서 round나 int, fracportion등을 이용해 소숫점자리에서 어떤 계산을 하는 경우에 아래와 같이 아주 작은 수를 더해주셔서 해당 값을 계산하게 작성하시는 방법 외에는 현재 컴퓨터 환경에서는 특별한 해결방법이 없습니다. plot1(round(327.275+0.000000000001,2)); 즐거운 하루되세요 > 와신상담 님이 쓴 글입니다. > 제목 : Round함수가 좀 이상 문의좀 합니다. > 어떨결에 발견한건데 첨부화일에 그림좀 봐주세요 MessageLog("Round(327.275, 2) [%.3f]", Round(327.275, 2)); MessageLog("Round(328.275, 2) [%.3f]", Round(328.275, 2)); 2자리까지 반올림한다면 두값은 각각 327.28, 328.28 나와야 되지 않을까요? 그런데 첫번째건 첨부파일에서 처럼 327.27로 나오네요. 328 이상부터는 위의 소수점이 반올림이 되는데 미만은 반올림이 안되요 확인좀 부탁드립니다.