Đừng nhầm lẫn Number.MAX_VALUE với tối đa giá trị chính xác. Tất cả các số trong javascript được lưu trữ dưới dạng điểm nổi 64 bit, có nghĩa là bạn có thể nhận được số cao (và thấp), nhưng chúng sẽ chỉ chính xác đến một điểm nhất định.
Dấu phẩy động kép (nghĩa là Javascript) có 53 bit độ chính xác và độ chính xác, có nghĩa là số nguyên cao nhất/thấp nhất "chắc chắn chính xác" trong javascript là +/- 9007199254740992 (2^53). Các số trên/dưới có thể chỉ ra là chính xác (số đơn giản chỉ thêm số 0 vào cuối, bởi vì các bit số mũ có thể được sử dụng để biểu diễn điều đó).
Hoặc, theo các từ của ECMAScript: "Lưu ý rằng tất cả các số nguyên dương và âm có độ lớn không lớn hơn 2^53 thể hiện trong loại Số (thực sự, số nguyên 0 có hai biểu diễn, +0 và - 0). "
Cập nhật
Chỉ cần thêm một chút cho câu hỏi hiện có, spec ECMAScript đòi hỏi rằng nếu một số không thể thiếu chỉ còn ít hơn 22 chữ số, .toString()
chí đầu ra nó trong ký hiệu thập phân tiêu chuẩn (ví dụ 169808845126909100000
như trong bạn thí dụ). Nếu nó có 22 chữ số trở lên, nó sẽ là đầu ra trong ký pháp khoa học chuẩn hóa (ví dụ: 1698088451269091000000
- một số 0 bổ sung - là đầu ra là 1.698088451269091e+21
).
Cả hai câu trả lời là đúng, tuy nhiên điều này giải thích nó trong chiều dài và cũng giải thích những gì sản lượng của tôi dường như bất thường có nghĩa là. – Mrchief