Integer check

350 次查看(过去 30 天)
Andy
Andy 2011-9-21
评论: Phani 2021-10-6
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 个评论
Phani
Phani 2021-10-6
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

请先登录,再进行评论。

采纳的回答

Sean de Wolski
Sean de Wolski 2011-9-21
  3 个评论
Jukka Kaipala
Jukka Kaipala 2016-7-27
Like it should. Inf is not considered an integer, and the same goes for NaN.
Thorsten
Thorsten 2016-11-2
编辑:Thorsten 2016-11-2
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.

请先登录,再进行评论。

更多回答(4 个)

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

请先登录,再进行评论。


Fandi Bataineh
Fandi Bataineh 2019-2-2
编辑:Fandi Bataineh 2019-2-2
use
floor(x)==ceil(x)
this will be true only for integers
  1 个评论
Sivyer Ge
Sivyer Ge 2019-2-24
Actually this will not work for type 'char'. Do you know other way to identify the difference between char and integer?

请先登录,再进行评论。


Manuel Alcazar
Manuel Alcazar 2019-9-16
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 2019-9-16
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 个评论
Stephen23
Stephen23 2019-9-16
This could be trivially vectorized: why force it to return a scalar?

请先登录,再进行评论。

类别

Help CenterFile Exchange 中查找有关 Operators and Elementary Operations 的更多信息

标签

Community Treasure Hunt

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

Start Hunting!

Translated by