How can I check if a value is of type Integer?

I need to check if a value is an integer. I found this: How to check whether input value is integer or float?, but if I'm not mistaken, the variable there is still of type double even though the value itself is indeed an integer.

5

12 Answers

If input value can be in numeric form other than integer , check by

if (x == (int)x)
{ // Number is integer
}

If string value is being passed , use Integer.parseInt(string_var).Please ensure error handling using try catch in case conversion fails.

1

If you have a double/float/floating point number and want to see if it's an integer.

public boolean isDoubleInt(double d)
{ //select a "tolerance range" for being an integer double TOLERANCE = 1E-5; //do not use (int)d, due to weird floating point conversions! return Math.abs(Math.floor(d) - d) < TOLERANCE;
}

If you have a string and want to see if it's an integer. Preferably, don't throw out the Integer.valueOf() result:

public boolean isStringInt(String s)
{ try { Integer.parseInt(s); return true; } catch (NumberFormatException ex) { return false; }
}

If you want to see if something is an Integer object (and hence wraps an int):

public boolean isObjectInteger(Object o)
{ return o instanceof Integer;
}
7
if (x % 1 == 0) // x is an integer

Here x is a numeric primitive: short, int, long, float or double

0

Try maybe this way

try{ double d= Double.valueOf(someString); if (d==(int)d){ System.out.println("integer"+(int)d); }else{ System.out.println("double"+d); }
}catch(Exception e){ System.out.println("not number");
}

But all numbers outside Integers range (like "-1231231231231231238") will be treated as doubles. If you want to get rid of that problem you can try it this way

try { double d = Double.valueOf(someString); if (someString.matches("\\-?\\d+")){//optional minus and at least one digit System.out.println("integer" + d); } else { System.out.println("double" + d); }
} catch (Exception e) { System.out.println("not number");
}
1

You should use the instanceof operator to determine if your value is Integer or not;

Object object = your_value;

if(object instanceof Integer) {
Integer integer = (Integer) object ;
} else { //your value isn't integer
}

Here is the function for to check is String is Integer or not ?

public static boolean isStringInteger(String number ){ try{ Integer.parseInt(number); }catch(Exception e ){ return false; } return true;
}

To check if a String contains digit character which represent an integer, you can use Integer.parseInt().

To check if a double contains a value which can be an integer, you can use Math.floor() or Math.ceil().

this is the shortest way I know with negative integers enabled:

Object myObject = "-1";
if(Pattern.matches("\\-?\\d+", (CharSequence) myObject);)==true)
{ System.out.println("It's an integer!");
}

And this is the way with negative integers disabled:

Object myObject = "1";
if(Pattern.matches("\\d+", (CharSequence) myObject);)==true)
{ System.out.println("It's an integer!");
}

You need to first check if it's a number. If so you can use the Math.Round method. If the result and the original value are equal then it's an integer.

Try this snippet of code

private static boolean isStringInt(String s){ Scanner in=new Scanner(s); return in.hasNextInt();
}

This can work:

int no=0;
try
{ no=Integer.parseInt(string); if(string.contains(".")) { if(string.contains("f")) { System.out.println("float"); } else System.out.println("double"); }
}
catch(Exception ex)
{ Console.WriteLine("not numeric or string");
}
0

You can use modulus %, the solution is so simple:

import java.text.DecimalFormat;
import java.util.Scanner;
public class Main { public static void main(String[] args) { Scanner scan = new Scanner(System.in); System.out.println("Enter first number"); Double m = scan.nextDouble(); System.out.println("Enter second number"); Double n= scan.nextDouble(); if(m%n==0) { System.out.println("Integer"); } else { System.out.println("Double"); }
}
}

You Might Also Like