Stripe Checkout Price error - Invalid Integer

torment32 picture torment32 · Jan 19, 2015 · Viewed 19.4k times · Source

I have a stripe account and am using the test API keys.

I have created a Plan with following info -

{
  "amount": 995, 
  "created": 1418800758, 
  "currency": "usd", 
  "id": "c06e1791-1c6a-45fe-9c26-8f0c07dda967", 
  "interval": "month", 
  "interval_count": 1, 
  "livemode": false, 
  "metadata": {}, 
  "name": "Pro2", 
  "object": "plan", 
  "statement_description": null, 
  "statement_descriptor": null, 
  "trial_period_days": null
}

I'm using checkout.js in my project. Once all the data is filled and we click on pay for the above plan, it raises an error 'Invalid Integer 994.999999999'.

This error is not raised for the $9.94, $9.96, $29.95 and other values tried by me.

Is this a checkout bug or something to do with my settings ??

Screenshot of the error -

Stripe error message

jsfiddle reproducing the error - http://jsfiddle.net/f30z9uc6/2/

Answer

koopajah picture koopajah · Jan 21, 2015

The problem here is a floating point error in Javascript. If you look at this updated version of your jsfiddle you'll see what's happening and how I fixed it. You need to round the result of your calculation to ensure you end up with an integer:

var amount = Math.round(9.95*100); // gives 995

To read more about Javascript and floating point arithmetic you should look into The Floating-Point Guide