У мене в Java є дубль, і я хочу перевірити, чи є він NaN. Який найкращий спосіб зробити це?
У мене в Java є дубль, і я хочу перевірити, чи є він NaN. Який найкращий спосіб зробити це?
Відповіді:
Використовуйте статичний Double.isNaN(double)метод або ваш Double«S .isNaN()метод.
// 1. static method
if (Double.isNaN(doubleValue)) {
...
}
// 2. object's method
if (doubleObject.isNaN()) {
...
}
Просто робимо:
if (var == Double.NaN) {
...
}
це НЕ є достатнім з - за того , як стандарт IEEE для NaN і чисел з плаваючою точкою визначається.
Double.isNaN should be (true) приємна відповідь
value == Double.NaNне працює, але Double.isNaN(value)працює чудово.
Спробуйте Double.isNaN():
Повертає істину, якщо це подвійне значення - це не число (NaN), інакше помилково.
Зауважте, що [ double.isNaN()] не працюватиме, оскільки у безкольорових парних пар не є пов'язаних з ними методів.
Double.isNan()а ні double.IsNan(), правда?
Ви можете також розглянути можливість перевірки, чи значення кінцеве через Double.isFinite(value). Оскільки у Java 8 є новий метод у Doubleкласі, де ви можете одразу перевірити, чи не є значення NaN та нескінченність.
/**
* Returns {@code true} if the argument is a finite floating-point
* value; returns {@code false} otherwise (for NaN and infinity
* arguments).
*
* @param d the {@code double} value to be tested
* @return {@code true} if the argument is a finite
* floating-point value, {@code false} otherwise.
* @since 1.8
*/
public static boolean isFinite(double d)
Ви можете перевірити наявність NaN за допомогою var != var. NaNне дорівнює NaN.
EDIT : Це, мабуть, найгірший метод. Це заплутано, жахливо для читабельності та загальної поганої практики.
isNanкращий для читабельності, але він працює, правда? І isNanметод використовує це для перевірки NaN.
isNaNце робиться під кришкою, але як це працює? Як щось не дорівнює собі ??
Початківцям потрібні практичні приклади. тому спробуйте наступний код.
public class Not_a_Number {
public static void main(String[] args) {
// TODO Auto-generated method stub
String message = "0.0/0.0 is NaN.\nsimilarly Math.sqrt(-1) is NaN.";
String dottedLine = "------------------------------------------------";
Double numerator = -2.0;
Double denominator = -2.0;
while (denominator <= 1) {
Double x = numerator/denominator;
Double y = new Double (x);
boolean z = y.isNaN();
System.out.println("y = " + y);
System.out.println("z = " + z);
if (z == true){
System.out.println(message);
}
else {
System.out.println("Hi, everyone");
}
numerator = numerator + 1;
denominator = denominator +1;
System.out.println(dottedLine);
} // end of while
} // end of main
} // end of class