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
.
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");
}
if (x % 1 == 0)
// x is an integer
Here x
is a numeric primitive: short
, int
, long
, float
or double
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
}
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");
}
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()
.
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;
}
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;
}
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();
}
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");
}
}
}
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!");
}
Source: Stackoverflow.com