Của bạn something
là a double
, và bạn đã xác định chính xác điều đó trong dòng
if (something == 0)
chúng ta có một double
ở bên trái (lhs) và một int
ở bên phải (rhs).
Nhưng bây giờ có vẻ như bạn nghĩ rằng lhs sẽ được chuyển đổi thành an int
, và sau đó ==
dấu sẽ so sánh hai số nguyên. Đó không phải là những gì xảy ra. Việc chuyển đổi từ double
thành int
là rõ ràng và không thể xảy ra "tự động".
Thay vào đó, điều ngược lại xảy ra. Rhs được chuyển đổi thành double
, và sau đó ==
dấu hiệu trở thành một bài kiểm tra bằng nhau giữa hai bộ đôi. Chuyển đổi này là ngầm định (tự động).
Nó được coi là tốt hơn (bởi một số) để viết
if (something == 0.0)
hoặc là
if (something == 0d)
bởi vì ngay lập tức rằng bạn đang so sánh hai đôi. Tuy nhiên, đó chỉ là vấn đề về phong cách và khả năng đọc vì trình biên dịch sẽ làm điều tương tự trong mọi trường hợp.
Trong một số trường hợp, việc đưa ra một "sự khoan dung" như trong câu trả lời của Jon Skeet cũng có liên quan, nhưng sự khoan dung đó cũng sẽ là một double
. Tất nhiên nó có thể là 1.0
nếu bạn muốn, nhưng nó không nhất thiết phải là số nguyên [ít dương nhất].
// Comparison of floating point numbers with equality // operator.
Bạn có thực sự cần xác định điều đó không? :)