The integer values you are trying to represent are larger than the integer precision that Javascript can handle (fixed-precision arithmetic). Maximum safe integers are -9007199254740991
to 9007199254740991
or +/-(2^53-1)
While 9007199254740992
can be represented it is considered unsafe. Why? Try this jsFiddle
Javascript
alert(9007199254740992 + 1);
Output
9007199254740992
See specification ecma-262/5.1/#sec-8.5
But you can use a library for arbitrary-precision arithmetic, or roll your own.
Using one such library, bignumber.js
, loaded using require.js
Javascript
require.config({
paths: {
bignumberjs: 'https://raw.github.com/MikeMcl/bignumber.js/master/bignumber.min'
}
});
require(['bignumberjs'], function (BigNumber) {
BigNumber.config({
EXPONENTIAL_AT: 100
});
var product = new BigNumber('50000000').times('39048902222211111111111111111111');
alert(product);
});
Output
1952445111110555555555555555555550000000
On jsFiddle