Alex Rivera | Logout

Subtracting long numbers in javascript

Asked 2010-01-12T15:37:30.247
11

Why is q == 0 in the following script?

<script>
  var start = 1234567890123456789;
  var end =   1234567890123456799;
  var q = end - start;
  alert(q);
</script>

I would think the result should be 10. What is the correct way to subtract these two numbers?

Edit
Report

2 Answers

21

Because numbers in JavaScript are floating-point. They have limited precision.

When JavaScript sees a very long number, it rounds it to the nearest number it can represent as a 64-bit float. In your script, start and end get rounded to the same value.

alert(1234567890123456789);   // says: 1234567890123456800
alert(1234567890123456799);   // says: 1234567890123456800

There's no built-in way to do precise arithmetic on large integers, but you can use a BigInteger library such as this one.

answered 2010-01-12T15:39:56.450
3

Jason already posted the why. For a solution, you can get a Javascript BigInt library at http://www-cs-students.stanford.edu/~tjw/jsbn/

answered 2010-01-12T15:41:22.660

Your Answer