2011-11-02 34 views
8

Tôi thiết lập một hệ thống phân tích chuỗi dữ liệu nhỏ gọn thành JSON. Tôi đang sử dụng số có 19 chữ số để lưu trữ id. Rất tiếc, bất kỳ số nào lớn hơn 17 chữ số, parseFloat() làm tròn vài chữ số cuối cùng.Parse Float có giới hạn làm tròn? Làm thế nào tôi có thể sửa lỗi này?

Điều này sẽ phá vỡ toàn bộ chuỗi dữ liệu. Tôi có thể sửa lỗi này không?

Ví dụ: 8246295522085275215 được chuyển thành 8246295522085276000. Tại sao điều này?

http://jsfiddle.net/RobertWHurst/mhZ7Q/

+0

Bạn don không có nhiều đồ vật, đúng không? Sau đó, sử dụng ID gia tăng thường xuyên bắt đầu bằng '1'. Nếu bạn muốn ngăn người khác có thể truy xuất các đối tượng khác bằng cách thay đổi ID, thêm đối số bổ sung chứa một số giá trị ngẫu nhiên - thì bạn vẫn có thể sử dụng một ID thích hợp (cũng trong cơ sở dữ liệu của bạn làm khóa chính) và khi người dùng cố gắng để sửa đổi URL anh ta không may mắn vì anh ấy không biết chuỗi ngẫu nhiên của các mục khác. – ThiefMaster

+1

nếu đây là một lý do tại sao bận tâm xử lý nó như một số ở tất cả? chỉ giữ nó như một chuỗi –

Trả lời

12

JavaScript chỉ có một loại số, là độ chính xác gấp đôi IEEE 754 floating-point. Điều đó có nghĩa, bạn có tối đa 52 bit chính xác, đó là một chút hơn 15 chữ số thập phân.

Nếu bạn cần độ chính xác cao hơn, bạn phải sử dụng thư viện bignum hoặc làm việc với chuỗi.

1

Hãy thử một trong những 1. Sử dụng một chuỗi 2. Chia số của mình theo hai và lưu các phần nhỏ hơn để một mảng 3. bignum thư viện 4. Sử dụng một số nhỏ hơn nếu bạn có thể

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