如何确定函数的输入在matlab中是否为整数

时间:2016-06-11 18:31:22

标签: matlab

我编写代码来获取输入(整数),将输入解释为年份,然后返回世纪。除了cent = centuries ([ 1 2])之类的输入外,代码工作正常。在这种情况下,它应该返回空字符串,但它返回第一世纪。我已经使用了~isinteger~isscalar以及y<1等,但它仍然会返回一个值。拜托,我能在这做什么?

{
    function cent = centuries (y)
if margin >1
    cent = [];
return
if y >0 && y<= 100
    cent = 'I';
    elseif y> 100 && y <= 200
    cent = 'II'; 
    elseif y> 200 && y <= 300
    cent =  'III' ; 
    elseif y> 300 && y <= 400
    cent = 'IV' ; 
    elseif y> 400 && y <= 500
    cent = 'V' ; 
    elseif y> 500 && y <= 600
    cent = 'VI' ; 
    elseif y> 600 && y <= 700
    cent ='VII'; 
    elseif y> 700 && y <= 800
    cent = 'VIII' ; 
    elseif y> 800 && y <= 900
    cent ='IX' ; 
    elseif y> 900 && y <= 1000
    cent ='X' ; 
    elseif y> 1000 && y <= 1100
    cent ='XI' ; 
    elseif y> 1100 && y <= 1200
    cent = 'XII'; 
    elseif y> 1200 && y <= 1300
    cent ='XIII' ; 
    elseif y> 1300 && y <= 1400
    cent ='XIV' ; 
    elseif y> 1400 && y <= 1500
    cent ='XV'; 
    elseif y> 1500 && y <= 1600
    cent ='XVI' ; 
    elseif y> 1600 && y <= 1700
    cent ='XVII' ; 
    elseif y> 1700 && y <= 1800
    cent ='XVIII' ; 
    elseif y> 1800 && y <= 1900
    cent ='XIX'; 
    elseif y> 1900 && y <= 2000
    cent ='XX' ; 
    elseif y> 2000 && y <= 2100
    cent ='XXI' ; 
    elseif y> 2100 && y <= 2200
    cent ='XXII' ; 
    elseif y> 2200 && y <= 2300
    cent ='XXIII' ; 
    elseif y> 2300 && y <= 2400
    cent ='XXIV' ; 
    elseif y> 2400 && y <= 2500
    cent ='XXV' ; 
    elseif y> 2500 && y <= 2600
    cent ='XXVI' ; 
    elseif y> 2600 && y <= 2700
    cent ='XXVII' ; 
    elseif y> 2700 && y <= 2800
    cent ='XXVIII' ; 
    elseif y> 2800 && y <= 2900
    cent ='XXIX' ; 
    elseif y> 2900 && y <= 3000
    cent ='XXX'; 
else cent =''.';
end 
}

my code

the problem

请查找附上我写的问题和代码,我已经使用了你的建议,但它没有重新输出一个非整数的输出 谢谢

2 个答案:

答案 0 :(得分:0)

如果要进行严格检查,可以使用nargin(输入参数的数量)来检查输入的数量以及类型检查:

function c = century(yr)
    if nargin == 1 && isscalar(yr) && ceil(yr) == yr && yr > 0
      % compute and return century value
    else
      c = [] % Or whatever the fail return value should be
    end
end

请注意,我已使用ceil(yr) == yr检查整数值,即使它存储在double中,因为issinteger只接受参数,如果它是int类型及其相关类型。 [参考:isinteger]。您可以根据要求进行更改。

编辑:

使用您提供的代码的完整功能:(似乎按要求工作。请根据我的建议检查您是否进行了正确的更改。)

function cent = centuries (y)
    if nargin == 1 && isscalar(y) && ceil(y) == y && y > 0
        if y >0 && y<= 100
        cent = 'I';
        elseif y> 100 && y <= 200
        cent = 'II'; 
        elseif y> 200 && y <= 300
        cent =  'III' ; 
        elseif y> 300 && y <= 400
        cent = 'IV' ; 
        elseif y> 400 && y <= 500
        cent = 'V' ; 
        elseif y> 500 && y <= 600
        cent = 'VI' ; 
        elseif y> 600 && y <= 700
        cent ='VII'; 
        elseif y> 700 && y <= 800
        cent = 'VIII' ; 
        elseif y> 800 && y <= 900
        cent ='IX' ; 
        elseif y> 900 && y <= 1000
        cent ='X' ; 
        elseif y> 1000 && y <= 1100
        cent ='XI' ; 
        elseif y> 1100 && y <= 1200
        cent = 'XII'; 
        elseif y> 1200 && y <= 1300
        cent ='XIII' ; 
        elseif y> 1300 && y <= 1400
        cent ='XIV' ; 
        elseif y> 1400 && y <= 1500
        cent ='XV'; 
        elseif y> 1500 && y <= 1600
        cent ='XVI' ; 
        elseif y> 1600 && y <= 1700
        cent ='XVII' ; 
        elseif y> 1700 && y <= 1800
        cent ='XVIII' ; 
        elseif y> 1800 && y <= 1900
        cent ='XIX'; 
        elseif y> 1900 && y <= 2000
        cent ='XX' ; 
        elseif y> 2000 && y <= 2100
        cent ='XXI' ; 
        elseif y> 2100 && y <= 2200
        cent ='XXII' ; 
        elseif y> 2200 && y <= 2300
        cent ='XXIII' ; 
        elseif y> 2300 && y <= 2400
        cent ='XXIV' ; 
        elseif y> 2400 && y <= 2500
        cent ='XXV' ; 
        elseif y> 2500 && y <= 2600
        cent ='XXVI' ; 
        elseif y> 2600 && y <= 2700
        cent ='XXVII' ; 
        elseif y> 2700 && y <= 2800
        cent ='XXVIII' ; 
        elseif y> 2800 && y <= 2900
        cent ='XXIX' ; 
        elseif y> 2900 && y <= 3000
        cent ='XXX'; 
        else cent =''.';
        end
else
        cent = ''; % Or whatever the fail return value should be
end

答案 1 :(得分:0)

您只需要同时使用isinteger( input )isscalar( input )。检查输入是否为正也很好。

注意:如果你对可能是double类型的整数感兴趣,比如1.0,那么你可以使用:

mod( input, 1 ) == 0