2011-12-27 45 views
6

Tôi có một hoạt động dịch vụ WCF trả về một đối tượng với các thuộc tính longList<string>. Khi tôi kiểm tra các hoạt động trong một ứng dụng WCF, mọi thứ hoạt động tốt và các giá trị là chính xác. Tuy nhiên, tôi cần để có thể gọi dịch vụ bằng cách sử dụng định dạng jQuery và JSON. Giá trị của thuộc tính long dường như thay đổi khi tôi đọc lại hàm OnSucceed.JSON.Stringify() trên các số lớn thay đổi giá trị số?

Sau khi tìm kiếm tôi thấy rằng JSON.stringify thay đổi giá trị lớn. Vì vậy, trong mã như thế này:

alert(JSON.stringify(25001509088465005)); 

... nó sẽ hiển thị các giá trị như 25001509088465004.

Điều gì đang xảy ra?

Demo đây: http://jsfiddle.net/naveen/tPKw7/

+0

Hãy đặt câu hỏi của bạn rõ ràng hơn. –

+0

chỉ cần kiểm tra mã javascript ở trên và xem những gì bạn đã gửi và những gì JSON.stringify đã trở lại. –

+2

Do giới hạn chính xác của javascripts Kiểu số. Xem thêm: http://stackoverflow.com/questions/588004/is-javascripts-math-broken – mbarkhau

Trả lời

4

JavaScript đại diện cho số sử dụng IEEE-754 đúp chính xác định dạng (64 bit). Như tôi đã hiểu, điều này cho bạn độ chính xác 53 bit, hoặc mười lăm đến mười sáu chữ số thập phân. Số của bạn có nhiều chữ số hơn JavaScript có thể đối phó với, vì vậy bạn kết thúc với một xấp xỉ.

Bạn có cần thực hiện các phép toán trên số lớn này không? Bởi vì nếu nó chỉ là một số loại ID bạn có thể trả về nó như một chuỗi và tránh được vấn đề.

+0

vâng nhưng tôi muốn có nó như là dài nhưng cuối cùng tôi nhận được nó như là chuỗi và đây là kết thúc của điều đó. –

+0

Không có kiểu dữ liệu "dài" trong JavaScript, chỉ có Số. –

+0

Có, tôi phải nói rõ ràng "JavaScript đại diện cho số _all_ sử dụng ..." – nnnnnn

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