I'm not a Javascript expert, but it sounds like your number is being stored as an IEEE-754 64-bit floating point number. Certainly that's what I get from C# code which will display the exact value of a double
:
double d = 9200000000032337;
Console.WriteLine(DoubleConverter.ToExactString(d));
(Using my own DoubleConverter
class.) My output is the same as yours: 9200000000032336
Floating point values only ever hold a certain number of significant digits accurately - and when the numbers get high enough, even integers can't be stored exactly.
ECMA-262 seems to confirm this:
4.3.19
Number value
primitive value corresponding to a double-precision 64-bit binary format IEEE 754 value
and from section 7.8.3 (numeric literals):
A numeric literal stands for a value of the Number type. This value is determined in two steps: first, a
mathematical value (MV) is derived from the literal; second, this mathematical value is rounded as described
below.
Section 8.5 contains more details.