ทำไมตรรกะนั้น
NaN
Not a Number
วิธี หมายเลขอะไร สิ่งใด คุณสามารถมีอะไรในด้านหนึ่งและอะไรก็ได้ในอีกด้านหนึ่งดังนั้นจึงไม่มีอะไรรับประกันว่าทั้งสองจะเท่ากัน NaN
คำนวณด้วยDouble.longBitsToDouble(0x7ff8000000000000L)
และตามที่คุณเห็นในเอกสารประกอบของlongBitsToDouble
:
ถ้าอาร์กิวเมนต์เป็นค่าใด ๆ ในช่วง0x7ff0000000000001L
ผ่าน
0x7fffffffffffffffL
หรืออยู่ในช่วง0xfff0000000000001L
ผ่าน
0xffffffffffffffffL
, NaN
ผลที่ได้คือ
นอกจากนี้ยังNaN
ได้รับการจัดการทางตรรกะภายใน API
เอกสาร
/**
* A constant holding a Not-a-Number (NaN) value of type
* {@code double}. It is equivalent to the value returned by
* {@code Double.longBitsToDouble(0x7ff8000000000000L)}.
*/
public static final double NaN = 0.0d / 0.0;
โดยวิธีการที่NaN
จะทดสอบเป็นตัวอย่างรหัสของคุณ:
/**
* Returns {@code true} if the specified number is a
* Not-a-Number (NaN) value, {@code false} otherwise.
*
* @param v the value to be tested.
* @return {@code true} if the value of the argument is NaN;
* {@code false} otherwise.
*/
static public boolean isNaN(double v) {
return (v != v);
}
สารละลาย
สิ่งที่คุณสามารถทำได้คือใช้compare
/ compareTo
:
Double.NaN
ได้รับการพิจารณาโดยวิธีนี้จะเท่ากับตัวเองและสูงกว่าdouble
ค่าอื่น ๆ ทั้งหมด(รวมถึง
Double.POSITIVE_INFINITY
)
Double.compare(Double.NaN, Double.NaN);
Double.NaN.compareTo(Double.NaN);
หรือequals
:
ถ้าthis
และargument
ทั้งสองแทนDouble.NaN
แล้วequals
วิธีการผลตอบแทนtrue
แม้ว่า
มีค่าDouble.NaN==Double.NaN
false
Double.NaN.equals(Double.NaN);