How do I check that input is numerical?
    46 visualizaciones (últimos 30 días)
  
       Mostrar comentarios más antiguos
    
    Seán Ó Héir
 el 24 de Abr. de 2017
  
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 comentario
  Stephen23
      
      
 el 24 de Abr. de 2017
				
      Editada: Stephen23
      
      
 el 24 de Abr. de 2017
  
			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.
Respuesta aceptada
  Adam
      
      
 el 24 de Abr. de 2017
        
      Editada: Adam
      
      
 el 24 de Abr. de 2017
  
      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 comentarios
  Peter
 el 22 de Abr. de 2023
				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
      
      
 el 23 de Abr. de 2023
				
      Editada: Stephen23
      
      
 el 23 de Abr. de 2023
  
			"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
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.
Más respuestas (1)
Ver también
Categorías
				Más información sobre Data Type Conversion en Help Center y File Exchange.
			
	Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!




