Check double variable if it contains an integer, and not floating point
Solution 1:
Use std::modf
:
double intpart;
modf(value, &intpart) == 0.0
Don't convert to int
! The number 1.0e+300
is an integer too you know.
Edit: As Pete Kirkham points out, passing 0 as the second argument is not guaranteed by the standard to work, requiring the use of a dummy variable and, unfortunately, making the code a lot less elegant.
Solution 2:
Assuming a c99 and IEEE-754 compliant environment,
(trunc(x) == x)
is another solution, and will (on most platforms) have slightly better performance than modf
because it needs only to produce the integer part. Both are completely acceptable.
Note that trunc
produces a double-precision result, so you don't need to worry about out of range type conversions as you would with (int)x
.
Edit: as @pavon points out in a comment, you may need to add another check, depending on whether or not you care about infinity, and what result you want to get if x
is infinite.