MATLAB数据类型识别输出错误:isinteger判断用户输入整数结果异常
问题原因
- 你在输入校验逻辑之后硬编码了
start=int16(10);,直接覆盖了用户输入的start值,后续所有校验都基于固定值10执行,自然无论输入什么都会提示是整数。 - 你误解了
isinteger()函数的作用:该函数仅判断变量的数据类型是否为MATLAB内置的整数类型(如int16、int32、uint8等),和变量存储的数值是否为整数值无关。比如double类型的5.0数值是整数,但isinteger(5.0)返回0;你把3.14强转为int16类型后,isinteger()返回1,但原始输入数值并不是整数。
修正方案
判断数值是否为整数,应该校验数值除以1的余数是否为0,用mod(待校验数值, 1) == 0即可实现,不需要强转数据类型。同时要去掉硬编码的start赋值,调整输入校验顺序(先判断输入是否为有效数字,再做数值范围校验),另外建议不要用start做变量名,避免和MATLAB内置函数重名。
修正后完整代码
prompt = {'请输入起始时间:','步长:','终止时间:'}; % 提示用户输入数据 dlgtitle = '参数输入'; % 设置对话框标题 dims = [1 40]; % 调整对话框尺寸 definput = {'0','0.01','10'}; % 设置默认值 answer = inputdlg(prompt,dlgtitle,dims,definput); % 存储用户输入的三个数据 % 先校验输入是否为有效数字 if isempty(str2num(answer{1})) f = msgbox('起始时间必须为数字!请重新输入!', '错误!'); elseif isempty(str2num(answer{2})) f = msgbox('步长必须为数字!请重新输入!', '错误!'); elseif isempty(str2num(answer{3})) f = msgbox('终止时间必须为数字!请重新输入!', '错误!'); else % 输入为有效数字再做转换和后续校验 start_val = str2num(answer{1}); % 将起始时间字符串转为数值 increment = str2num(answer{2}); % 将步长字符串转为数值 stop_val = str2num(answer{3}); % 将终止时间字符串转为数值 if start_val >= stop_val f = msgbox('起始时间不能大于等于终止时间!请重新输入!', '错误!'); elseif increment >= stop_val f = msgbox('步长不能大于等于终止时间!请重新输入!', '错误!'); elseif start_val < 0 f = msgbox('起始时间只能为非负数!请重新输入!', '错误!' ); elseif stop_val < 0 f = msgbox('终止时间只能为非负数!请重新输入!', '错误!'); elseif increment <= 0 f = msgbox('步长只能为正数!请重新输入!', '错误!'); else % 校验起始时间是否为整数值 if mod(start_val, 1) == 0 disp('是的,输入为整数') else disp('否,输入不是整数') end end end
内容的提问来源于stack exchange,提问作者Tom
相关产品推荐
相关产品推荐

