JavaScript에서 부동소숫점 연산 오차를 보완 할 라이브러리가 있는지요?
조회수 1360회
보통 프로그래밍언어에서 부동소숫점 연산시 오차가 발생합니다.
var x = 0.2 + 0.1; // 0.3
console.log(x) // 0.30000000000000004
var y = 0.1 * 0.2; // 0.02
console.log(y) // 0.020000000000000004
이런 오차를 보완하기 위해 다음과 같은 함수를 사용합니다.
var fpCalc = function (op, x, y) {
var xexp = Math.pow(10, String(x).length - String(x).indexOf('.') - 1),
yexp = Math.pow(10, String(y).length - String(y).indexOf('.') - 1);
var tens = Math.max(100, xexp, yexp);
var n = 0;
switch(op) {
case '*': n = x * y;
break;
case '-': n = x - y;
break;
case '+': n = x + y;
break;
case '/': n = x / y;
break;
default:
return NaN;
}
return Math.round(n * tens) / tens;
};
console.log(fpCalc('+', 0.1, 0.2));
console.log(fpCalc('+', 707.4, 226.2));
console.log(fpCalc('*', 0.1, 0.2));
console.log(fpCalc('/', 214500, 1.1));
다수 복잡한데, 혹시 다른 방법이나 라이브러리가 있는지 알고 싶습니다.
1 답변
-
http://jsbin.com/devacu/edit?html,output 여기서 테스트 해보시기 바랍니다
추가
mathjs는 사칙연산이 상당히 복잡해서 링크 보시면 나오는 세 모듈 중 하나를 선택해서 쓰는게 좋을것 같습니다
-
(•́ ✖ •̀)
알 수 없는 사용자
-
댓글 입력