2008-12-14 77 views
9

Dưới đây là một ví dụ:Gấp đôi giá trị trả về 0

Double d = (1/3); 
System.out.println(d); 

này trả về 0, không 0,33333 ... như mong muốn.

Có ai biết không?

+0

Có thể trùng lặp [Phân chia trong Java luôn dẫn đến số không (0)?] (Http://stackoverflow.com/questions/10455677/division-in-java-always-results-in- zero-0) –

+0

@ ΦXocę 웃 Пepeúpa ツ Nó không phải là một bản sao. Câu hỏi đó là một bản sao của câu hỏi này. Nhìn vào những ngày trước khi bạn gắn cờ – Zoe

Trả lời

38

Đó là bởi vì 13 được coi là integers khi bạn không chỉ định khác, vì vậy 1/3 đánh giá với integer0 mà sau đó được đúc vào double0. Để khắc phục, hãy thử (1.0/3) hoặc có thể 1D/3 để nêu rõ rằng bạn đang xử lý các giá trị kép.

12

Nếu bạn có int s mà bạn muốn chia sử dụng phân dấu chấm động, bạn sẽ phải cast int đến một double:

double d = (double)intValue1/(double)intValue2 

(Trên thực tế, chỉ đúc intValue2 nên là đủ để có các intValue1 được đúc để double tự động, tôi tin.)

1

sử dụng đôi và không đúp trừ khi bạn cần phải sử dụng những valu es trong ý nghĩa đối tượng. Hãy lưu ý về các khái niệm Autoboxing

+0

OP hỏi về các phương pháp cắt ngắn của Java và tại sao một phân tách các số nguyên bị cắt bớt, ngay cả khi được lưu trữ trong một đôi; không phải về autoboxing. – MathSquared

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