How do I check that input is numerical?

조회 수: 150 (최근 30일)
Seán Ó Héir
Seán Ó Héir 2017년 4월 24일
편집: Stephen23 2023년 4월 23일
I'm trying to create a program that will prompt the user for a numerical input, for example: 'What age are you?'. I know how to prompt the user to ask for an input, but I want to know how to check the answer to make sure it is a numerical figure, ie to stop the user putting in the answer 'twelve'. Any help would be greatly appreciated.
Seán
  댓글 수: 1
Stephen23
Stephen23 2017년 4월 24일
편집: Stephen23 2017년 4월 24일
More reliable than str2num is to use str2double (which does not call eval and does not evaluate arbitrary code). str2double outputs NaN for invalid input strings, so simply do this:
val = str2double(input('What age are you?','s'));
if isnan(val)
... not a number
else
... was number
end
See KSSV's answer for another example of using str2double.

댓글을 달려면 로그인하십시오.

채택된 답변

Adam
Adam 2017년 4월 24일
편집: Adam 2017년 4월 24일
str2num( inputVal )
will return the number if it is valid or empty otherwise so a
if ~isempty( str2num( inputVal ) )
test would check it is a number, or remove the ~ if you want to check for not a number and give an error message in that case.
  댓글 수: 4
Peter
Peter 2023년 4월 22일
I'm a new user, with some help from other answers I found this solution. Option to use existing data from a file or new input; plus checking numeric input, maybe not the best solution, it works
str2num will create error message after input either i or j, compex number
doRun=true;
while doRun=true
disp('input calc_data D1:')
disp('Choose 1 or 2');
disp('1= keep old data');
disp('2= new data');
Sip_choose=input ('Choose 1 or 2: ','s');
option=str2double(Sip_choose);
if(option==1)
calc_data_D1= D1
% old value in mat file saved
break
elseif(option==2)
while doRun
D1=input('=> input calc_data D1= ','s');
D1t=str2double(D1);
TF=isstrprop(D1t,'digit');
if TF==0
D1=D1t;
% new value of D1
doRun=false;
else
disp('no numeric input')
end
end
else
disp('wrong choose of option')
disp('1 or 2 accepted only')
end
end
Stephen23
Stephen23 2023년 4월 23일
편집: Stephen23 2023년 4월 23일
"so a if ~isempty( str2num( inputVal ) ) test would check it is a number"
Note that STR2NUM is fundamentally buggy:
str = 'struct("x",pi)';
if ~isempty( str2num(str) )
disp('Oh no!')
end
Oh no!
Read the STR2NUM file to understand why. The reliable approach is to use STR2DOUBLE or SSCANF or the like.
@Peter: you can simplify your code by avoiding the conversion to numeric and using STRCMPI.

댓글을 달려면 로그인하십시오.

추가 답변 (1개)

Thorsten
Thorsten 2017년 4월 24일

카테고리

Help CenterFile Exchange에서 Whos에 대해 자세히 알아보기

태그

아직 태그를 입력하지 않았습니다.

Community Treasure Hunt

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

Start Hunting!

Translated by