为什么我会得到NumberFormatException

时间:2016-08-12 06:19:59

标签: java

public static void main(String[] args) {
    Integer f = null;
    try {
        f = Integer.valueOf("12.3"); 
        String s = f.toString(); 
        int i = Integer.parseInt(s);
        System.out.println("i = " + i);
    } catch (Exception e) {
        System.out.println("trouble : " + f + e);
    } 
}

3 个答案:

答案 0 :(得分:7)

问题是,当您致电"Integer.parseInt(s)"时,该方法会认为您有整数内容,并且会将string转换为int。但现在你有浮动价值。所以它不能通过Integer.parseInt()方法从字符串(包含浮点值)转换为整数。你能做的是

 float fl = Float.parseFloat(s);

 int i = (int) f1;

答案 1 :(得分:0)

这里的实际错误是:

java.lang.NumberFormatException: For input string: "12.3"
    at java.lang.NumberFormatException.forInputString(NumberFormatException.java:65)
    at java.lang.Integer.parseInt(Integer.java:492)
    at java.lang.Integer.valueOf(Integer.java:582)
    at Main.main(Main.java:8)

来自java-doc的根本原因:

/**
 * Factory method for making a <code>NumberFormatException</code>
 * given the specified input which caused the error.
 *
 * @param   s   the input causing the error
 */
static NumberFormatException forInputString(String s) {
    return new NumberFormatException("For input string: \"" + s + "\"");
}

为什么会发生以及如何省略?

  

抛出以指示应用程序已尝试转换a   字符串到其中一个数字类型,但字符串不是   有适当的格式。

因此,请将您的12.3值更改为12.因为它已由Kevin Eschescary-wombat评论

答案 2 :(得分:-1)

不是整数

整数是整数,例如12或13.您的12.3是小数,不是整数。所以它不能被Integer类解析。

BigDecimal

相反,您应该使用BigDecimal类进行解析。

BigDecimal x = new BigDecimal( "12.3" );

如果您想要速度而不是准确度,请使用floatdouble基元类型。

floating-point类型的小数部分可以introduce extraneous digits。因此,当准确性很重要时,例如货币/金额,请坚持使用BigDecimal。正如Oracle Tutorial所说:

  

float ...绝不能用于精确值,例如货币。为此,您需要使用java.math.BigDecimal类。

float f = Float.parseFloat( "12.3" );

如果你想要一个浮动但是作为一个对象而不是primitive float,那么构建一个Float

Float f = new Float( "12.3" );