首页 > 解决方案 > 如何为 if 语句“声明” NaN?

问题描述

我有一个二次公式求解器的代码,但我无法让 NaN 与我的if陈述一起表现。

package homework;
import java.util.Scanner;
import java.lang.Math;
//                          My Name 9/18/18 
// The purpose of this class is to allow a user to input an a,b, and c     value     and perform the quadratic equation on them
public class QuadFormHW 
{

public static void main(String[] args) 
{
    double a,b,c,answer1,answer2;
    Scanner inputReader = new Scanner(System.in);
    System.out.print("Please enter an \"a\" \"b\" and \"c\" value.");
    a = inputReader.nextDouble();
    b = inputReader.nextDouble();
    c = inputReader.nextDouble();
    answer1 = (-b + Math.sqrt(Math.pow(b, 2) - (4 * a * c))) / (2 * a);
    answer2 = (-b - Math.sqrt(Math.pow(b, 2) - (4 * a * c))) / (2 * a);
    if (answer1 == NaN)
    {
        System.out.print("Error cannot calculate");
    }
    else if (answer2 == NaN)
    {
        System.out.print("Error cannot calculate");
    }
    else
    {
        System.out.printf("Your answers are: %.3f , %.3f",answer1,answer2); 
    }
    inputReader.close();
}

}

谁能帮我理解为什么NaN不是一个可接受的值?

标签: javavariablesif-statementnan

解决方案


您问的问题与此较早的 QA 帖子相同:您如何测试 double 是否等于 NaN?(我已将此标记为该副本的副本)。

简而言之:根据设计NaN不能与任何其他值进行有意义的比较,(因此foo == NaN不适用于您的目的)。这是因为 NaN 传播。

相反,要测试NaN,使用Double.isNaN( value )or Float.isNaN( value )


推荐阅读