2013-06-29 52 views
8

Tôi có câu hỏi với mọi người.int a = (int) ((0,7 + 0,1) * 10). Tại sao a = 7?

int a = (int) ((0.7 + 0.1) * 10) 

Sau khi thực hiện các mã này, a = 7. tôi có thể t `hiểu tại sao, bởi vì (0,7 + 0,1) = 0,8 và 0,8 * 10 = 8. Ai có thể cho tôi biết lý do tại sao? Cảm ơn!

+7

Thử in kết quả của '0,7 + 0,1' và bạn sẽ có câu trả lời. – Vulcan

+0

Kết quả là 0. Tất cả cùng tôi không hiểu tại sao a = 7 –

+0

@ user2535193 Bạn in bằng cách nào? Đăng mã có trách nhiệm in. – Maroun

Trả lời

24

Vấn đề là không phải 0.1 hay 0.7 có thể được biểu diễn chính xác như double:

  • 0.1 được biểu diễn dưới dạng khoảng 0.10000000000000000555.

  • 0.7 được biểu thị bằng khoảng 0.69999999999999995559.

Tổng của chúng xấp xỉ 0.79999999999999993339. Nhân với mười và cắt ngắn, điều này cho phép 7.

What Every Computer Scientist Should Know About Floating-Point Arithmetic là một bài đọc tuyệt vời về chủ đề này.

5

Đó là số học phao, nó được làm sàn.

gì đang xảy ra ở đây là (0,1 + 0,7) là thực sự gần 0,8 nhưng nó không phải thực 0.8, khi bạn nhân nó với 10 bạn nhận được 7,9999 ..., khi bạn sàn đó, bạn nhận được 7 .

3

Phần thập phân của int s trong Java bị cắt bớt. Bạn có thể biến các biến số dấu phẩy động xy hoặc chỉ truyền chúng thành phao và truyền trở lại để nhận int dưới dạng kết quả cuối cùng.

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