! 제품 버전을 정확하게 입력해 주세요.
제품 버전이 정확하게 기재되어 있지 않은 경우,
최신 버전을 기준으로 안내 드리므로
더욱 빠르고 명확한 안내를 위해
제품 버전을 정확하게 입력해 주세요!

소수점 데이터 계산 시 값이 틀리다면? > 지식 쉐어링

본문 바로가기

SpreadJS

지식 쉐어링

개발꿀팁 소수점 데이터 계산 시 값이 틀리다면?

페이지 정보

작성자 GCK루카스 작성일 2023-01-11 15:08 조회 493회 댓글 1건

본문

첨부파일

SpreadJS를 사용하다 보면 간혹 소수점 데이터를 가진 값을 이용해 계산을 할 때 아주 작은 소수점 부분이 틀린 경우를 볼 수 있습니다.


이는 실수 데이터를 계산할 때 부동 소수점 방식을 반영하기 때문에 발생하는 버그입니다.

이러한 버그는 SpreadJS뿐만 아니라 IEEE745를 채택하는 모든 컴퓨터에서 발생하는 버그입니다.

따라서, 엑셀에서도 동일한 문제가 발생합니다.



간단한 예를 보면,
02b41d5ca7885ef080d3e35cbe5ff620_1673415267_9475.png
위의 엑셀 이미지에서 B3 셀의 값과 B4의 셀 값은 모두 0.27로 같아 보이지만 그 둘을 비교해보면 FALSE가 나옵니다.
두 셀의 소수점을 펼쳐보면 아래와 같이 나타납니다.

02b41d5ca7885ef080d3e35cbe5ff620_1673415435_8707.png 
이를 방지하기 위해 많은 유저들이 ROUND 함수를 사용하고 있습니다.
그럼, SpreadJS에서는 어떻게 이를 방지할 수 있을까요?

마찬가지로 SpreadJS에서도 ROUND 함수를 사용할 수 있습니다.
SpreadJS는 그 외에 다른 방법이 한 가지 더 있습니다.
아래 샘플과 같이 소수점 13번째 자리까지만 계산되도록 설정할 수 있습니다.

엑셀 파일을 불러오는 경우에는 "GC.Spread.CalcEngine.Functions.CALC_PRECISION = 13"를 사용하더라도 재계산을 하지 않도록 하는 doNotRecalculateAfterLoad 옵션을 사용하면 버그가 발생한 값을 표기합니다.
이는 이미 엑셀이 버그가 발생된 값을 가지고 있기 때문입니다.

02b41d5ca7885ef080d3e35cbe5ff620_1673417131_1424.png
<Excel 내부 모습>

그렇기 때문에 반드시 doNotRecalculateAfterLoad 옵션을 false로 설정하여 SpreadJS에서 다시 계산될 수 있도록 해야 합니다.


  • 페이스북으로 공유
  • 트위터로  공유
  • 링크 복사
  • 카카오톡으로 보내기

댓글목록

벤벤무마니님의 댓글

profile_image 벤벤무마니 작성일

오 이런 버그 관련해서 workaround 정보 감사합니다!

메시어스 홈페이지를 통해 제품에 대해서 더 자세히 알아 보세요!
홈페이지 바로가기

인기글

더보기
  • 인기 게시물이 없습니다.
메시어스 홈페이지를 통해 제품에 대해서 더 자세히 알아 보세요!
홈페이지 바로가기
이메일 : sales-kor@mescius.com | 전화 : 1670-0583 | 경기도 과천시 과천대로 7길 33, 디테크타워 B동 1107호 메시어스(주) 대표자 : 허경명 | 사업자등록번호 : 123-84-00981 | 통신판매업신고번호 : 2013-경기안양-00331 ⓒ 2024 MESCIUS inc. All rights reserved.