Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Java maximum literal number in eclipse

Tags:

java

I have a line that looks like

if(numb2 < 10000000000000 & numb2 > 100000000000){

So in Eclipse it says 10000000000000 and 100000000000 are both out of the integer literal range. Specifically

The literal 10000000000000 of type int is out of range and The literal 1000000000000 of type int is out of range

I changed the line so it looked like

if(numb2 < 1000000000*10000 & numb2 > 100000000*1000){

but if you typed a number in that range it just said

Exception in thread "main" java.lang.NumberFormatException: For input string: "5555555555555"
    at java.lang.NumberFormatException.forInputString(Unknown Source)
    at java.lang.Integer.parseInt(Unknown Source)
    at java.lang.Integer.parseInt(Unknown Source)
    at twothousandthirteen.LuckyNumber.main(LuckyNumber.java:12)

I would like to know if there is a way to extend the literal number range or do anything to fix the problem.

Thanks KMehta

like image 672
KMehta Avatar asked Oct 05 '22 14:10

KMehta


1 Answers

Those numbers are larger than the largest int value, which is 231-1 or 2147483647, and which is available as the constant Integer.MAX_VALUE.

The reason you were able to code it as 1000000000*10000 is because although each multiplicand is within the range of the maximum int value, the result is not and java handles this by overflowing the result so it falls within the valid range.

To fix the problem, make your variables long (64 bits) and your constants long also by appending L at the end if the number (the default numerical type in java is int), and your should use Long.parseLong() to cater for the larger values in your input.

Note that, like int, the range of long is limited too: to 263-1 or 9223372036854775807, which is available as the constant Long.MAX_VALUE.

For arbitrarily large numbers, use the BigInteger class.

like image 53
Bohemian Avatar answered Oct 10 '22 02:10

Bohemian