Asked by C Zeng
on 14 Mar 2013

Hi, by the command of isinteger I can check if it is an integer, however, when defined at first, Matlab assume it is double precision right? So even a=3, isinteger(a) returns 0.

How to solve this problem?

*No products are associated with this question.*

Answer by per isakson
on 14 Mar 2013

Edited by per isakson
on 16 Jan 2015

Accepted answer

Matlab represents integers in differnt ways:

- int8, int16, etc. see Christians answer
- with a special use of double, which is called
*flint*. See Floating Points

I use this function to test for *flint*

function isf = isflint( m ) % floating double only try bitand( abs( m ), 1 ); isf = true; catch me isf = false; end end

I picked up the idea from a contribution by the "Pedestrian" in the FEX.

(I stripped off comments and error handling.)

Show 2 older comments

Jan Simon
on 16 Mar 2013

`double` can store 16 digits only, this number does not contain any information about the fractional part for reasons of the precision. `bitand()` detect this and throw an error, while `1e17==round(1e17)` replies `true`, because cropping the fractional part does not influence value.

Answer by Jan Simon
on 16 Mar 2013

Joining the rounding with the checks for overflows:

function isf = isflint(m) isf = (abs(m) <= bitmax && m == floor(m));

Answer by ChristianW
on 14 Mar 2013

doc isinteger

isinteger(int8(3))

Opportunities for recent engineering grads.

## 0 Comments