开发者

how can I parse "30.0" or "30.00" to Integer?

I using:

String str="300.0";
System.out.println(Integer开发者_如何学运维.parseInt(str));

return an exception:

Exception in thread "main" java.lang.NumberFormatException: For input string: "300.0"

How can I parse this String to int?

thanks for help :)


Here's how you do it:

String str = "300.0";
System.out.println((int) Double.parseDouble(str));

The reason you got a NumberFormatException is simply that the string ("300.00", which is a floating point number) could not be parsed as an integer.


It may be worth mentioning, that this solution prints 300 even for input "300.99". To get a proper rounding, you could do

System.out.println(Math.round(Double.parseDouble("300.99")));  // prints 301


I am amazed no one has mentioned BigDecimal.

It's really the best way to convert string of decimal's to int.
Josuha Bloch suggest using this method in one of his puzzlers.

Here is the example run on Ideone.com

class Test {
  public static void main(String args[]) {
    try {
        java.math.BigDecimal v1 = new java.math.BigDecimal("30.0");
        java.math.BigDecimal v2 = new java.math.BigDecimal("30.00");            
      System.out.println("V1: " + v1.intValue() + " V2: " + v2.intValue());
    } catch(NumberFormatException npe) {
      System.err.println("Wrong format on number");
    }
  }
}


You should parse it to double first and then cast it to int:

String str="300.0";
System.out.println((int)(Double.parseDouble(str)));

You need to catch NumberFormatExceptions though.

Edit: thanks to Joachim Sauer for the correction.


You can use the Double.parseDouble() method to first cast it to double and afterwards cast the double to int by putting (int) in front of it. You then get the following code:

String str="300.0";
System.out.println((int)Double.parseDouble(str));


Integer.parseInt() has to take a string that's an integer (i.e. no decimal points, even if the number is equivalent to an integer. The exception you're getting there is essentially saying "you've told me this number is an integer, but this string isn't in a valid format for an integer!"

If the number contains a decimal component, then you'll need to use Double.parseDouble(), which will return a double primitive. However, since you're not interested in the decimal component you can safely drop it by just casting the double to an int:

int num = (int)Double.parseDouble(str);

Note however that this will just drop the decimal component, it won't round the number up at all. So casting 1.2, 1.8 or 1.999999 to an int would all give you 1. If you want to round the number that comes back then use Math.round() instead of just casting to an int.

0

上一篇:

下一篇:

精彩评论

暂无评论...
验证码 换一张
取 消

最新问答

问答排行榜