2015-01-31 6 views
2

big.js, bignumber.js 및 decimal.js를 시도했습니다. 그것들은 모두 합리적으로 특정 시점까지 잘 작동하지만, 충분히 큰 수의 "홀수"숫자로 임의 정밀도 계산을해야 할 때 부족합니다 (현재 테스트 케이스는 31435517643980 * (1/31435517643980) === 1입니다). 나는 외부 API에 대한 호출을 포함하여 이와 같은 표현식을 처리 할 수있는 솔루션에 개방적이다. 저는 현재 Wolfram | Alpha의 API를보고 있지만 2000 통화/월 한도는 제한하고 싶습니다. 왜냐하면 제 응용 프로그램이 꽤 많은 호출을 할 것이기 때문입니다.JavaScript에서 반올림 문제없이 임의 정밀도 산술 연산을 수행 할 수 있습니까?

이 질문에 대한 SE 사이트가 잘못 되었다면 알려주거나 이동하십시오.

+0

정수 또는 정수가 아닌 값만 필요합니까? –

+0

@RobertDodier 정수만 가능합니다. – Hydrothermal

답변

1

아마도 가장 일반적인 방법은 두 숫자에 같은 배율을 곱하여 십진수가 없도록 한 다음 작업을 수행 한 다음 다시 나누는 것일 수 있습니다. 여기에 원유 구현의 :

function getDigits(n){ 
    return n.toString().substring(n.toString().indexOf('.')+1).length; 
} 
function xNums(n1,n2){ 
    var highRes=(n1*Math.pow(10,getDigits(n1))*(n2*Math.pow(10,getDigits(n2)))); 
    return highRes/Math.pow(10,getDigits(n1))/Math.pow(10,getDigits(n2)); 
} 

그런 다음, xNums(31435517643980,(1/31435517643980))===1를 실행합니다. Chrome에서 작동합니다.