2018년 1월 22일 월요일

javascript 부동 소수 오류 해결 방법입니다.

거의 대부분의 프로그램 언어에서 부동 소수 오류가 발생합니다. java, c, javascript 등
아래 코드를 실행시키면 아래와 같이 의도하지 않은 결과가 발생합니다.
정수 끼리의 연산에서는 나누기를 제외하면 부동 소수 오류가 발생하지 않습니다.

0.1 + 0.2 = 0.30000000000000004
0.45 - (0.3 + 0.15) = 5.551115123125783E-17
1300.0 * (700.0 / 4000.0) = 227.49999999999997
8366.8 * 58 = 485274.39999999997
58332.4 + 68772.9 + 105771.8 = 232877.09999999998

똑같은 연산을 oracle db 에서 실행하면 발생하지 않습니다.
javascript 라이브러리 중에 big.js 라는 수학 연산 라이브러리가 있는데 java 의 bigdecimal 과 유사하게 사용할 수 있습니다.

big.js 를 사용하여 부동 소수 오류를 방지할 수 있습니다.
하지만 일반적인 수 연산이 아닌 메써드 호출로 연산자를 대신해야 하는 불편함이 있습니다.
예제)
var result = +Big(0.1).plus(0.2);

(javascript 에서 + 기호를 변수 등에 붙이면 숫자로 변환됩니다.)

java 에서도 BigDecimal 를 사용하면 부동소수오류를 피할 수 있습니다.
단, 결과로 받을 값의 소숫점이하 자릿수에 따라 BigDecimal 생성할 때 arguments 를 잘 주어야 합니다.

groovy 에서는 일반 연산자를 사용하여 BigDecimal 연산을 할 수 있습니다.

댓글 없음:

댓글 쓰기

인기글

추천 게시물

윈도우에서 오라클 11g 삭제하기

* 참조 및 출처 https://wickedmagic.tistory.com/407 https://wookoa.tistory.com/304 * 윈도우에서 오라클 11g 삭제하기 > 서비스에서 오라클 관련 서비스 모두 종료 > Un...