Tôi đã cố gắng để loại bỏ các phần fractional
từ một double
trong trường hợp nó là toàn bộ sử dụng:Java - hành vi kỳ lạ hành ternary
(d % 1) == 0 ? d.intValue() : d
Và gặp phải những hành vi sau đây mà tôi không hiểu:
public static void main(String[] args) {
Double d = 5D;
System.out.println((d % 1) == 0); // true
System.out.println((d % 1) == 0 ? d.intValue() : "not whole"); // 5
System.out.println((d % 1) == 0 ? d.intValue() : d); // 5.0
}
Như bạn có thể thấy trên dòng thứ ba, toán tử chọn giá trị else
- 5.0
ngay cả khi điều kiện (d % 1) == 0
được đáp ứng.
Điều gì đang xảy ra ở đây?
Nó chọn 'd.intValue()' trong cả hai trường hợp, nó chỉ thực hiện chuyển đổi để đảm bảo đối số thứ hai và thứ ba có cùng loại. – Keppil
Có thể được coi là bản sao của http://stackoverflow.com/questions/8002603/why-does-the-ternary-operator-unexpectedly-cast-integers (và tất cả các bản sao của nó) ... – Marco13
@ Marco13, tôi đã không biết rằng việc truyền là vấn đề khi đăng câu hỏi. có lẽ nó là một bản sao của hindsight .. – Daniel