MATLAB Answers

Andy
0

Integer check

Asked by Andy
on 21 Sep 2011
Latest activity Commented on by Stephen Cobeldick on 16 Sep 2019
How can i do an integer check in matlab? Say i have a number, a = 1.5, how do i check if it is integer or not? i want to use an if statement:
if non_integer(a) == true
end
so i need to know what to use for "non_integer", which would return a true or false

  0 Comments

Sign in to comment.

Tags

5 Answers

Sean de Wolski
Answer by Sean de Wolski
on 21 Sep 2011
 Accepted Answer

floor(x)==x

  3 Comments

Walter Roberson
on 21 Sep 2011
Fails on inf and -inf ;-)
Jukka Kaipala on 27 Jul 2016
Like it should. Inf is not considered an integer, and the same goes for NaN.
Thorsten
on 2 Nov 2016
Like it should not. Because Inf is not an integer, but
floor(inf) == inf
returns true.
So the correct test would be
~isinf(x) & floor(x) == x
Or, as Walter suggests,
mod(x,1) == 0
But this may be all just of theoretical interest.

Sign in to comment.


Walter Roberson
Answer by Walter Roberson
on 21 Sep 2011

I suggest you think about floor(), ceil(), fix(), and round()

  2 Comments

Walter Roberson
on 21 Sep 2011
A test that works even for nan and inf and -inf :
mod(x,1) == 0
Walter Roberson
on 2 Nov 2016
NaN == 0 is false, so in each of those cases, the result of the test would be false, indicating that the values are not integers.
But if you tried the one above, floor(inf)==inf then the result would be true, seemingly indicating that it is an integer when it is not.

Sign in to comment.


Answer by Fandi Bataineh on 2 Feb 2019
Edited by Fandi Bataineh on 2 Feb 2019

use
floor(x)==ceil(x)
this will be true only for integers

  1 Comment

Sivyer Ge on 24 Feb 2019
Actually this will not work for type 'char'. Do you know other way to identify the difference between char and integer?

Sign in to comment.


Answer by Manuel Alcazar on 16 Sep 2019

function [bool,idx] = isint(x)
% Check whether input is integer or not
% Inf and NaN are not integers
if ~isnumeric(x)
error('Input must be a numeric, not a %s.',class(x))
end
bool = (mod(x,1) == 0);
% bool = (round(x) == floor(x)); % Other approach. Fails with Inf and
% NaN.
idx = find(bool);
% Manolín Sept-2019
end

  0 Comments

Sign in to comment.


per isakson
Answer by per isakson
on 16 Sep 2019

function isf = isflint( m )
% floating double only
%
% http://www.mathworks.com/company/newsletters/news_notes/pdf/Fall96Cleve.pdf
% JanSimon: http://www.mathworks.se/matlabcentral/answers/67247-about-isinteger- ...
% command-confusion#answer_78914
assert( isa( m, 'double' ) && isvector( m ) ...
, 'isflint:IllegalInput' ...
, 'The input should be a double vector' )
isf = all( abs( m ) <= flintmax ) ...
&& all( floor( m ) == m ) ;
end

  1 Comment

Stephen Cobeldick on 16 Sep 2019
This could be trivially vectorized: why force it to return a scalar?

Sign in to comment.