This is to do with the nature of IEEE754 double-precision 64-bit floating point math1 (all compliant JavaScript implementations use this form of IEEE arithmetic) -- your number 10 466 511 635 124 471 is larger than the highest positive integer that is representable as consecutive numbers, which is 253 (9 007 199 254 740 992). The 64 bits of a number in JavaScript are represented using 1 bit for the sign, 52 bits for the number (special behaviour for exponents effectively make 53 bits of precision) and 11 bits for the exponent, which is why that's the case.
When your number exceeds this maximum number, it will use an exponent of higher than 1 to represent this, which will result in the smallest possible representation lowering. With an exponent of two (as it is represented in your case), the smallest differentiable change in numbers will be two, and because your number is between these two, it will be rounded to the nearest one.
JavaScript does not have any arbitrary-size integer format, nor does it have support for anything similar to BigNum
(to use the Java term) or arbitrary-precision arithmetic. If you'd like to store larger numbers, you'd have to use some other method of storing it, such as strings.
1: I've linked to Wikipedia as the actual specification does cost money to obtain legally/officially -- if someone has a better source please edit it in.