检查字符串是否为double时,为什么会出错?

时间:2018-05-27 13:26:44

标签: java parsing numberformatexception

嘿伙计们我很擅长编码,但我的一个项目是检查一个字符串是否可以解析为double。它在尝试运行程序时不断打印错误。

以下是代码:

        public static void main(String[] args) {
            SimpleReader in = new SimpleReader1L();
            SimpleWriter out = new SimpleWriter1L();

          // Constant entered in by user as a string
            out.println("Welcome to constant approximator");
            out.println("Please enter in a constant to be estimated");
            String realConstant = in.nextLine();

        //Double variable created in order to reassign later
            double test = 0;

       //FormatChecker class and canParseDouble verifies if the string is truly a double. boolean method.
            FormatChecker.canParseDouble(realConstant);
       //Test reassign and converts
            test = Double.parseDouble(realConstant);
            out.print(test);
            in.close();
            out.close();
        }

    }

这是错误:

Exception in thread "main" java.lang.NumberFormatException: For input string: "pi"
    at sun.misc.FloatingDecimal.readJavaFormatString(Unknown Source)
    at sun.misc.FloatingDecimal.parseDouble(Unknown Source)
    at java.lang.Double.parseDouble(Unknown Source)
    at ABCDGuesser1Test.main(ABCDGuesser1Test.java:36)

3 个答案:

答案 0 :(得分:0)

这是因为您键入的pi未被识别为π(pi)常量。你键入的是一个字符串,这些字符不能转换为数字。

如果要输入任何数字,包括pi之类的特殊常量,则必须先检查输入是否为数字或字符串。如果它是String,您可以尝试将其与定义的常量(如πe)匹配,并在Java中使用它们定义的值,例如Math.PI

答案 1 :(得分:0)

您应该使用nodemon --exec npm start 的结果,而不仅仅是调用它。我想是这样的事情:

canParseDouble()

答案 2 :(得分:0)

正如你所说:

//FormatChecker class and canParseDouble verifies if the string is truly a double. boolean method.
        FormatChecker.canParseDouble(realConstant);

你知道这行调用了一个布尔方法,然后返回true或false。但是,您不会使用此返回值。如果是这样,甚至调用函数的意义是什么,对吧?

您正在尝试检查字符串realConstant是否为double,方法会检查它,但您只是忽略它,这里。我相信你有一个错误,因为它是否真的是一个双倍,其余的代码将运行。在字符串实际上不是double的情况下,将出现错误,因为其余代码无法编译。

然后您应该使用if语句,例如:

if (FormatChecker.canParseDouble(realConstant)) {
    test = Double.parseDouble(realConstant);
    out.println(test);
} 

另外,我认为您不应期望输入“pi”来返回双倍!