2011-07-05 41 views
5

Tôi đang tạo một ứng dụng ngân sách với javascript. Tôi phải để javascript làm hầu hết các hoạt động. Vì vậy, tôi có một số điều khiển mà người dùng thay đổi số tiền mong muốn cho một danh mục và ứng dụng của tôi hiển thị số tiền mới cho các danh mục phụ. Vì vậy, Nếu tôi có + Auto $ 50,23 - Gas $ 30,25 - Bảo trì $ 6.27 - Bảo hiểm $ 10,02 - ...Hoạt động tiền tệ với javaScript?

Vì vậy, nếu người dùng thay đổi Auto 50,23-90,00, số tiền cho khí, bảo trì, bảo hiểm, vv sẽ phản ánh mức tăng% trong danh mục gốc của chúng.

Vấn đề là sau một vài thao tác, tôi mất độ chính xác và tạo ra một số lỗi khó chịu. Hầu hết các lần số không thêm (như họ nên). Sau khi thay đổi số tiền tự động vài lần và sau đó đặt thành 0, các số khác không phải lúc nào cũng bằng 0 và đôi khi chúng dưới 0 cho tôi NaN, vì vậy nếu sau này tôi thay đổi Tự động cho một số lớn hơn 0, NaN của tôi sẽ ở NaN.

Tôi vừa nghe ai đó nói rằng các phân số trong javascript là xấp xỉ là một vấn đề khác. Tôi đã cố gắng tìm hiểu xem đây có phải là sự thật không, nhưng không thể tìm thấy bất kỳ điều gì (có thể tôi đã không tìm đúng điều khoản)

Tôi chắc chắn một số bạn đã gặp phải sự cố tương tự, bạn sẽ làm gì đề nghị? Ai đó đã đề xuất nhân số ban đầu của tôi với 100 và sau đó thực hiện tất cả các hoạt động, nhưng tôi e rằng điều này sẽ không giúp tôi thoát khỏi vấn đề mất độ chính xác.

Bất kỳ ý tưởng nào?

Tôi sẽ đánh giá cao sự trợ giúp của bạn!

+0

Mọi số trong JS là số dấu phẩy động, nhưng bạn không nên mất quá nhiều độ chính xác trên các số 2 chỗ. Bạn sẽ cần hàng ngàn hoặc hàng triệu lần lặp trước khi FP làm tròn sẽ trở thành một vấn đề. Bạn có thể hiển thị bit liên quan của mã của bạn nơi bạn thực hiện các phép tính không? Chúng tôi không cần toàn bộ trang, chỉ một chút. –

+0

bạn cũng có thể tạo ra lớp của riêng bạn với các thuộc tính như đô la và xu (tất cả số nguyên) và thực hiện các hoạt động của riêng bạn – spacevillain

+0

lỗi bổ sung fp là các lỗi phổ biến nhất được báo cáo trong javascript. – jzilla

Trả lời

9

Số dấu phẩy động nhị phân không hoạt động khi xử lý các phân số thập phân, vì vậy 0,1 + 0,2 không bằng 0,3. Đây là lỗi được báo cáo thường xuyên nhất trong JavaScript và đó là hậu quả có chủ ý khi sử dụng Chuẩn IEEE cho Số học dấu chấm động nhị phân (IEEE 754). Tiêu chuẩn này rất phù hợp với nhiều ứng dụng , nhưng nó vi phạm hầu hết những điều bạn đã học về các con số ở trường cấp hai. May mắn thay, số học số nguyên trong dấu phẩy động là chính xác, do đó, các lỗi biểu diễn thập phân có thể tránh được bằng cách chia tỷ lệ. Ví dụ: Ví dụ, giá trị đô la có thể được chuyển đổi thành giá trị đồng xu bằng cách nhân chúng với 100. Số tiền sau đó có thể thêm chính xác số tiền sau đó . Tổng có thể được chia cho 100 để chuyển đổi thành đô la. Mọi người có một số tiền là kỳ vọng hợp lý khi họ đếm tiền rằng kết quả sẽ chính xác.

"JavaScript: The Good Parts by Douglas Crockford. Bản quyền 2008 Yahoo! Inc., 978-0-596-51774-8."

3

Luôn luôn với đơn vị tiền tệ theo dõi nó dưới dạng số nguyên nội bộ. Tất cả các hoạt động nên được thực hiện trên các số nguyên. Chỉ có số thập phân để hiển thị.

check out this fiddle nếu bạn đang suy nghĩ về việc sử dụng các dấu thập phân để theo dõi tiền.

+0

Dưới đây là cập nhật fiddle: http://jsfiddle.net/PfPbt/15/ nơi bạn có thể thấy sự khác biệt và giải pháp được đề xuất. –

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