Java parse a number in exponential notation

56,676

Solution 1

Use Double.valueOf() and cast the result to long:

Double.valueOf("9.18E+09").longValue()

Solution 2

BigDecimal bd = new BigDecimal("9.18E+09");
long val = bd.longValue();

But this adds overhead, which is not needed with smaller numbers. For numbers that are representable in long, use Joachim Sauer's solution.

Share:
56,676
bragboy
Author by

bragboy

I am a seriously passionate non-stop learner. I am an entrepreneur, love experimenting, and exploring new things. I blog here and occasionally here as well

Updated on April 28, 2020

Comments

  • bragboy
    bragboy over 2 years

    I am trying to do a conversion of a String to integer for which I get a NumberFormatException. The reason is pretty obvious. But I need a workaround here. Following is the sample code.

    public class NumberFormatTest {
     public static void main(String[] args) {
      String num = "9.18E+09";
      try{
       long val = Long.valueOf(num);
      }catch(NumberFormatException ne){
       //Try to convert the value to 9180000000 here
      }
     }
    }
    

    I need the logic that goes in the comment section, a generic one would be nice. Thanks.

  • bragboy
    bragboy over 12 years
    This looks very clean. Thanks!
  • bragboy
    bragboy over 12 years
    Nice solution.. Thank you. cant accept the answer now, have to wait for 7 more minutes. :)
  • Matt Byrne
    Matt Byrne over 8 years
    Old post, but if you want to enforce exact long range (no truncation) and avoid rounding errors, use new BigDecimal(numberString).longValueExact()