2017-12-14 115 views
7

Khi chạyJavascript parseInt chuyển đổi là buggy

console.log(parseInt("9658921879781125"))
nó mang lại một giá trị của 9658921879781124, đó là ít hơn so với giá trị ban đầu.

Tại sao lại xảy ra trường hợp này?

+1

http://2ality.com/2012/07/large-integers.html –

+0

nhưng có thể chuyển đổi 9658921879781126 đúng –

+1

Xem câu trả lời của G. Petrioli. Nó không an toàn, nó không có nghĩa là nó sẽ thất bại mọi lúc. – NikxDa

Trả lời

4

Đó sẽ là vì

9658921879781125 > Number.MAX_SAFE_INTEGER // true 

Vì vậy, nó là an toàn để cố gắng làm việc với những con số lớn hơn Number.MAX_SAFE_INTEGER


Các MAX_SAFE_INTEGER liên tục có giá trị 9007199254740991 (9,007,199,254,740,991 hoặc ~ 9 quadrillion). Lý do đằng sau con số đó là JavaScript sử dụng đôi chính xác số định dạng dấu chấm động theo quy định tại IEEE 754 và chỉ có một cách an toàn có thể biểu diễn số giữa - (2 -1) và 2 - 1.

An toàn trong ngữ cảnh này đề cập đến khả năng trình bày chính xác các số nguyên và so sánh chính xác các số nguyên.

Các vấn đề liên quan