Quelques façons dont vous pouvez le faire ...
En utilisant REGEXP:
wholeNumber = 1934; %# Your number
numberString = num2str(wholeNumber,16); %# Convert to a string
matches = regexp(numberString,'[1-9]','match'); %# Find matches
firstNumber = str2double(matches{1}); %# Convert the first match to a double
En utilisant ISMEMBER:
wholeNumber = 0.04; %# Your number
numberString = num2str(wholeNumber,16); %# Convert to a string
isInSet = ismember(numberString,'123456789'); %# Find numbers that are
%# between 1 and 9
numberIndex = find(isInSet,1); %# Get the first number index
firstNumber = str2double(numberString(numberIndex)); %# Convert to a double
EDIT:
Une discussion de ce sujet s'est produite sur l'un des the MathWorks blogs. Quelques solutions supplémentaires intéressantes sont fournies ici. Une question qui a été soulevée avait des solutions vectorisées, voici donc d'une version vectorisée je suis venu avec:
numberVector = [1934 0.04 -56];
numberStrings = cellstr(num2str(numberVector(:),16));
firstIndices = regexp(numberStrings,'[1-9]','once');
firstNumbers = cellfun(@(s,i) s(i),numberStrings,firstIndices);
Whoops, promesse que je ne l'ai pas copie de votre réponse, Yassin! Vous devez avoir posté pendant que je découvrais ma solution. +1 pour penser à utiliser abs() pour couvrir ces négatifs embêtants. – Doresoom
+1: Je savais qu'il y avait probablement un moyen de le faire mathématiquement, mais les premières solutions auxquelles je pensais étaient basées sur des chaînes. – gnovice
@gnovive: Merci. Corrigé! – yassin