How can I check if a value is of type Integer?
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.
Testing if given number is integer
#include <cmath>
bool is_integer(float k)
{
return std::floor(k) == k;
}
This solution should work for all possible values of k
. I am pretty sure this is a case where you can safely compare floats using ==
.
Try to thoughtfully name functions. integer
does not give any clue what it actually does, so I changed the function name to something more meaningful.
For the future, testing if a number is integer should feel like a very simple operation, so you should have a strong feeling that the best solution will be very simple. I hope you realize your original solution is absurd for many reasons (biggest reason: it will cause a stack overflow for the vast majority of cases).
Checking whether a variable is an integer or not
If you need to do this, do
isinstance(<var>, int)
unless you are in Python 2.x in which case you want
isinstance(<var>, (int, long))
Do not use type
. It is almost never the right answer in Python, since it blocks all the flexibility of polymorphism. For instance, if you subclass int
, your new class should register as an int
, which type
will not do:
class Spam(int): pass
x = Spam(0)
type(x) == int # False
isinstance(x, int) # True
This adheres to Python's strong polymorphism: you should allow any object that behaves like an int
, instead of mandating that it be one.
BUT
The classical Python mentality, though, is that it's easier to ask forgiveness than permission. In other words, don't check whether x
is an integer; assume that it is and catch the exception results if it isn't:
try:
x += 1
except TypeError:
...
This mentality is slowly being overtaken by the use of abstract base classes, which let you register exactly what properties your object should have (adding? multiplying? doubling?) by making it inherit from a specially-constructed class. That would be the best solution, since it will permit exactly those objects with the necessary and sufficient attributes, but you will have to read the docs on how to use it.
Checking if a number is an Integer in Java
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
.
How to check if a variable is an integer in JavaScript?
Use the === operator (strict equality) as below,
if (data === parseInt(data, 10))
alert("data is integer")
else
alert("data is not an integer")
Check if the number is integer
Another alternative is to check the fractional part:
x%%1==0
or, if you want to check within a certain tolerance:
min(abs(c(x%%1, x%%1-1))) < tol
C - How to check if the number is integer or float?
I would suggest the following:
- Read the number into a floating point variable,
val
, say. - Put the integer part of
val
into an int variable,truncated
, say. - Check whether or not
val
andtruncated
are equal.
The function might look like this:
bool isInteger(double val)
{
int truncated = (int)val;
return (val == truncated);
}
You will likely want to add some sanity checking in case val
is outside the range of values that can be stored in an int
.
Note that I am assuming that you want to use a mathematician's definition for an integer. For example, this code would regard "0.0"
as specifying an integer.
How to test if a double is an integer
if ((variable == Math.floor(variable)) && !Double.isInfinite(variable)) {
// integer type
}
This checks if the rounded-down value of the double is the same as the double.
Your variable could have an int or double value and Math.floor(variable)
always has an int value, so if your variable is equal to Math.floor(variable)
then it must have an int value.
This also doesn't work if the value of the variable is infinite or negative infinite hence adding 'as long as the variable isn't inifinite' to the condition.
How to detect if a given number is an integer?
num % 1 === 0
This will convert num
to type Number
first, so any value which can be converted to an integer will pass the test (e.g. '42'
, true
).
If you want to exclude these, additionally check for
typeof num === 'number'
You could also use parseInt()
to do this, ie
parseInt(num) == num
for an untyped check and
parseInt(num) === num
for a typed check.
Note that the tests are not equivalent: Checking via parseInt()
will first convert to String
, so eg true
won't pass the check.
Also note that the untyped check via parseInt()
will handle hexadecimal strings correctly, but will fail for octals (ie numeric strings with leading zero) as these are recognized by parseInt()
but not by Number()
. If you need to handle decimal strings with leading zeros, you'll have to specify the radix argument.
Related Topics
How to Install Tensorflow on Windows
C++ Remove_If on a Vector of Objects
Does Std::Array<> Guarantee Allocation on the Stack Only
Opencv Image Loading for Opengl Texture
How to Find the Qt5 Cmake Module on Windows
Noexcept, Stack Unwinding and Performance
Vector: Initialization or Reserve
What's the Point of Std::Unique_Ptr::Get
Typecasting Eigen::Vectorxd to Std::Vector
Command Line Compile Using Cl.Exe
How to Simulate Interfaces in C++
Alternative to C++ Static Virtual Methods
Meaning of Default Initialization Changed in C++11
Compile Time Template Instantiation Check
Getting the Current Time (In Milliseconds) from the System Clock in Windows
Eclipse Indexer Can't Resolve Shared_Ptr
Static Constexpr' Function Called in a Constant Expression Is...An Error