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);
}
}
答案 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)
/**
* 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 Esche和scary-wombat评论
答案 2 :(得分:-1)
整数是整数,例如12或13.您的12.3是小数,不是整数。所以它不能被Integer
类解析。
BigDecimal
相反,您应该使用BigDecimal
类进行解析。
BigDecimal x = new BigDecimal( "12.3" );
如果您想要速度而不是准确度,请使用float
或double
基元类型。
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" );