将String解析为Float值时的NumberFormatException

时间:2013-12-12 07:07:53

标签: java parsing generics interface java.lang.class

System.out.println("Enter a number: ");

String in1 = input.nextLine();

Integer input1 = Integer.valueOf(in1);
Float input2 = Float.parseFloat(in1);
Double input3 = Double.valueOf(in1).doubleValue();

System.out.println();
System.out.println("Enter another number: ");

String in2 = input.nextLine();
Integer input21 = Integer.valueOf(in2);
Float input22 = Float.parseFloat(in2);
Double input23 = Double.valueOf(in2).doubleValue();

FloatN fco = new FloatN();

System.out.println();
System.out.println("The sum of both of your numbers is: " + fco.add(input2, input22));
done = true;

我很清楚这个程序是完全不切实际的,我只是用它来练习解析,泛型和接口。我尝试了Integer,它运行良好,但在尝试Float和Double.add()函数时,我得到3个错误:

at java.lang.NumberFormatException.forInputString

at java.lang.Integer.parseInt

at java.lang.Integer.valueOf

我删除了整数解析器,程序工作正常。我很困惑,为什么我只在输入十进制值时才得到错误,并希望有人帮助指出导致异常的确切原因,以便将来可以避免任何类似的错误,并且因为删除整数解析器会删除IntegerN类的任何功能。

此外,如果有人因任何原因需要FloatN类:

public static class FloatN implements Summization<Float>{
    public FloatN(){}
    public Float add(Float a, Float b)
    {
        return a + b;
    }
}

Summization是一个带有add()方法的通用接口。

提前致谢。

4 个答案:

答案 0 :(得分:2)

如果输入十进制值作为输入,Integer.parseInt()方法将无法解析它。如果您仍希望在代码中全部使用它们,则必须获得该Float值的int值。您可以使用intValue()方法:

    Float input2 = Float.parseFloat(in1);
    Integer input1 = Integer.valueOf(input2.intValue());

答案 1 :(得分:1)

因为Integer.valueOf(in2);这一行会给出floatdouble的NumberFormatException,你可以使用

Number num = NumberFormat.getInstance().parse(myNumber);

请参阅@ http://docs.oracle.com/javase/7/docs/api/java/text/NumberFormat.html

答案 2 :(得分:1)

也许添加不包含可解析的float的字符串或者它是null。

From javadoc:

NullPointerException - if the string is null
NumberFormatException - if the string does not contain a parsable float.

答案 3 :(得分:0)

NumberFormatException出现在Integer解析器中,如果输入包含decimal,则不在Double和Float解析器中。

在这种情况下,您可以使用split获取十进制数的整数部分并解析:

    String[] s = in1.split("\\.");
    Integer input1 = Integer.valueOf(s[0]);
    Float input2 = Float.parseFloat(in1);
    Double input3 = Double.valueOf(in1).doubleValue();