48

Is there any method or quick way to check whether a number is an Integer (belongs to Z field) in Java?

I thought of maybe subtracting it from the rounded number, but I didn't find any method that will help me with this.

Where should I check? Integer Api?

8
  • 1
    You are parsing number from String or you already have number in some float or double? Commented Mar 31, 2011 at 15:47
  • 4
    What do you mean "belongs to Z field"? Commented Mar 31, 2011 at 15:47
  • I have any number, it can be float ir double as well. Commented Mar 31, 2011 at 15:51
  • Z field- It means that it is integer. Commented Mar 31, 2011 at 15:52
  • 7
    @ntt: N = natural numbers, Z = integer, Q = rational, R = real, C = complex Commented Mar 31, 2011 at 15:52

13 Answers 13

82

Quick and dirty...

if (x == (int)x)
{
   ...
}

edit: This is assuming x is already in some other numeric form. If you're dealing with strings, look into Integer.parseInt.

Sign up to request clarification or add additional context in comments.

3 Comments

Normally I have a function isInteger(), which has try catch over Integer.parseInt, returning false in case exception is occurring.
this is a good answer, and I upvoted it for that reason -- but still, make sure you understand the limitations of floating point representations!
orginaly this solution dont work for me but it use it in this wary: if (x.intValue() == x.doubleValue()) {}
18

One example more :)

double a = 1.00

if(floor(a) == a) {
   // a is an integer
} else {
   //a is not an integer.
}

In this example, ceil can be used and have the exact same effect.

Comments

10
/**
 * Check if the passed argument is an integer value.
 *
 * @param number double
 * @return true if the passed argument is an integer value.
 */
boolean isInteger(double number) {
    return number % 1 == 0;// if the modulus(remainder of the division) of the argument(number) with 1 is 0 then return true otherwise false.
}

Comments

4

if you're talking floating point values, you have to be very careful due to the nature of the format.

the best way that i know of doing this is deciding on some epsilon value, say, 0.000001f, and then doing something like this:

boolean nearZero(float f)
{
    return ((-episilon < f) && (f <epsilon)); 
}

then

if(nearZero(z-(int)z))
{ 
    //do stuff
}

essentially you're checking to see if z and the integer case of z have the same magnitude within some tolerance. This is necessary because floating are inherently imprecise.

NOTE, HOWEVER: this will probably break if your floats have magnitude greater than Integer.MAX_VALUE (2147483647), and you should be aware that it is by necessity impossible to check for integral-ness on floats above that value.

1 Comment

+1: You get round error on float for integers greater than 2^24 (about 16 million) If you use double you get round errors for integers gretaer than 2^53 (8 million trillion)
1

With Z I assume you mean Integers , i.e 3,-5,77 not 3.14, 4.02 etc.

A regular expression may help:

Pattern isInteger = Pattern.compile("\\d+");

2 Comments

by Z he meant Integers, en.wikipedia.org/wiki/Integer <-- Z is the normal symbol used to represent the set.
@notthetup - I don't think so.
1
    double x == 2.15;

    if(Math.floor(x) == x){
        System.out.println("an integer");
    } else{
        System.out.println("not an integer");
    }

I think you can similarly use the Math.ceil() method to verify whether x is an integer or not. This works because Math.ceil or Math.floor rounds up x to the nearest integer (say y) and if x==y then our original `x' was an integer.

Comments

0
    if((number%1)!=0)
    {
        System.out.println("not a integer");
    }
    else
    {
        System.out.println("integer");
    }

2 Comments

Be careful with floats and doubles in Java, their (lack of) precision can cause problems. Use BigDecimal
@PabloLozano I did not understand your concern, can you please explain your comment with some example.
0

change x to 1 and output is integer, else its not an integer add to count example whole numbers, decimal numbers etc.

   double x = 1.1;
   int count = 0;
   if (x == (int)x)
    {
       System.out.println("X is an integer: " + x);
       count++; 
       System.out.println("This has been added to the count " + count);
    }else
   {
       System.out.println("X is not an integer: " + x);
       System.out.println("This has not been added to the count " + count);


   }

Comments

0

All given solutions are good, however most of them can give issues with Static Code Analysis (e.g. SONAR): "Floating point numbers should not be tested for equality" (see https://jira.sonarsource.com/browse/RSPEC-1244).

I am assuming that input that should be tested is double, not string.

As a workaround, I test numbers for not being integers:

public boolean isNotInteger(double x) {
    return x - Math.floor(x) > 0;
}

Comments

-1
 int x = 3;

 if(ceil(x) == x) {

  System.out.println("x is an integer");

 } else {

  System.out.println("x is not an integer");

 }

1 Comment

This pretty much repeats the top answers and without including the ceil(int) function, this is unusable. Also, if x is already an int, what point does this check even have?
-1

Check if ceil function and floor function returns the same value

static boolean isInteger(int n) 
{ 
return (int)(Math.ceil(n)) == (int)(Math.floor(n)); 
} 

Comments

-2

You can just use x % 1 == 0 because x % 1 gives the residual value of x / 1

1 Comment

Similiar answers are already present, makes no sense posting it again.
-3

// in C language.. but the algo is same

#include <stdio.h>

int main(){
  float x = 77.6;

  if(x-(int) x>0)
    printf("True! it is float.");
  else
    printf("False! not float.");        

  return 0;
}

1 Comment

Probably you should post it in a question explicitly targeted at C (e.g. 1, 2 )? Make sure that your approach doesn't repeat already posted answers.

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.