关于java:将String解析为Float值时的NumberFormatException

NumberFormatException when parsing String to Float value

本问题已经有最佳答案,请猛点这里访问。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
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个错误:

位于java.lang.NumberFormatException.ForInputString

在java.lang.integer.parsing

在java.lang.integer.valueof

我删除了整数解析器,程序运行良好。我不明白为什么只有当我输入十进制值时才会得到错误,并且希望有人帮助指出导致异常的确切原因,这样我就可以避免将来出现这样的错误,因为删除整数解析器会从integern类中删除任何功能。

此外,如果有人出于任何原因需要floatn类:

1
2
3
4
5
6
7
public static class FloatN implements Summization<Float>{
    public FloatN(){}
    public Float add(Float a, Float b)
    {
        return a + b;
    }
}

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

事先谢谢。


如果输入十进制值,Integer.parseInt()方法将无法对其进行分析。如果您仍然希望在代码中包含它们,则必须获取该float值的int值。您可以使用intValue()方法:

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


可能添加不包含可分析浮点的字符串,或者它为空。

来自JavaDoc:

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


因为Integer.valueOf(in2);这一行会给出数字格式,除了floatdouble之外,您可以使用

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

参见@http://docs.oracle.com/javase/7/docs/api/java/text/numberformat.html


numberFormatException出现在整数分析器中,如果输入包含十进制,则不出现在double和float分析器中。

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

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