2017-10-23 4 views
0

Node.js 플랫폼에서 Stripe로 지불하는 안전한 방법을 만들려고합니다. 현재https://github.com/MikeMcl/bignumber.js/을 사용하여 온라인 구매의 부분합 및 총계를 결정하기 위해 계산 작업의 정확성을 유지하기 위해 작업을 수행합니다.줄무늬 노드 임의의 정밀도 숫자

let x = BigNumber(numberOfItems); 
let y = BigNumber(costPerItem); 
let z = BigNumber(taxRatePerOrderTotal/100); 

let costToCharge = x.times(y).plus(x.times(y).times(z)) 

내 관심사는 내가 할 때 낭비로 이동하는 모든 아름다운 임의 정밀도의 소수 연산을하지 않는다는 것입니다 잘라, 따라서 IEEE764 플로트로 다시 변경됩니다

costToCharge.toNumber() 

약간의 정밀도를 벗어났다. 그리고 스트라이프 문서에 따르면 Number이 걸리고 문제를 해결할 문자열 버전이 amount이라고 생각하지 않습니다.

답변

1

Stripe requires integer cents이므로 100을 곱하여 정수로 변환해야합니다.

+0

예 그러나 노드의 "정수"는 실제로 정수를 나타내는 double입니다. – Thalatta

+1

두 정밀도의 정밀도에 관계없이 Charge가 정수로만 계산 될 수 있으므로 궁극적으로 '두 자리로 반올림'하고 '100으로 곱하기'해야합니다. – floatingLomas

+0

맞습니다. 그렇지만 주어진 주, 도시 및 정부의 반올림 전략을 따르는 돈을 처리 할 때 그것은 필요한 부정확성입니다. 그와 상관없이, 높은 돈 값을 수레로 산술 연산을 수행하는 것과 같이 사소한 방식으로 부정확 한 두 개의 소수로 반올림되는 값을 만들기 위해 할 수있는 일이 있습니다. – Thalatta