Integer check

1 253 vues (au cours des 30 derniers jours)
Andy
Andy le 21 Sep 2011
Commenté : Phani le 6 Oct 2021
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
  1 commentaire
Phani
Phani le 6 Oct 2021
I think you can use rem function which throws out the remainder.
if(rem(a,1) ~=0) %checks if a is an integer with help of remainder
....
end

Connectez-vous pour commenter.

Réponse acceptée

Sean de Wolski
Sean de Wolski le 21 Sep 2011
floor(x)==x
  3 commentaires
Jukka Kaipala
Jukka Kaipala le 27 Juil 2016
Like it should. Inf is not considered an integer, and the same goes for NaN.
Thorsten
Thorsten le 2 Nov 2016
Modifié(e) : Thorsten le 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.

Connectez-vous pour commenter.

Plus de réponses (4)

Walter Roberson
Walter Roberson le 21 Sep 2011
I suggest you think about floor(), ceil(), fix(), and round()
  2 commentaires
Walter Roberson
Walter Roberson le 21 Sep 2011
A test that works even for nan and inf and -inf :
mod(x,1) == 0
Walter Roberson
Walter Roberson le 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.

Connectez-vous pour commenter.


Fandi Bataineh
Fandi Bataineh le 2 Fév 2019
Modifié(e) : Fandi Bataineh le 2 Fév 2019
use
floor(x)==ceil(x)
this will be true only for integers
  1 commentaire
Sivyer Ge
Sivyer Ge le 24 Fév 2019
Actually this will not work for type 'char'. Do you know other way to identify the difference between char and integer?

Connectez-vous pour commenter.


Manuel Alcazar
Manuel Alcazar le 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

per isakson
per isakson le 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 commentaire
Stephen23
Stephen23 le 16 Sep 2019
This could be trivially vectorized: why force it to return a scalar?

Connectez-vous pour commenter.

Catégories

En savoir plus sur Logical dans Help Center et File Exchange

Tags

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!

Translated by