레이블이 부동소수오류인 게시물을 표시합니다. 모든 게시물 표시
레이블이 부동소수오류인 게시물을 표시합니다. 모든 게시물 표시

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...