get 0 in the end of a regexp function

1 view (last 30 days)
Adrian Brown
Adrian Brown on 11 Jun 2021
Edited: Stephen23 on 11 Jun 2021
Hello,
I have a number x= 1.25690e-15 in the first step I extract only the the first part of the x which mean firstPart = 1.25690 using the program bellow, then I used the fuction regexp to split the firstPart varibale to elements. in the result of the program I expect to get : [1 2 5 6 9 0] but Unfortunatly I got only [1 2 5 6 9].
x = 1.25690e-15;
string = sprintf('%.8e', x); % Convert number to a scientific notation string with 8 decimal places of precision
stringParts = strsplit(string,'e'); % Split the string where 'e' is
firstPart = str2double(stringParts(1)); % Get the 1st part of stringParts which is the first part of standard form.
k=str2double(regexp(num2str(firstPart),'\d','match')); % slpit the firstPart variable to elements
I really appreciate any help and suggestion.
  2 Comments
Sebastiano Marinelli
Sebastiano Marinelli on 11 Jun 2021
I think you should try to work with string untill the end since when you convert the string to a number:
firstPart = str2double(stringParts(1));
Matlab does automatically remove the not usefull 0 since 1.25690 = 1.2569
something like this should work (yep it is not very elegant, but you can base on this code to solve your problem)
x = 1.25690e-15;
%Note that I had to change .8 to .5!!!
string = sprintf('%.5e', x); % Convert number to a scientific notation string with 8 decimal places of precision
stringParts = strsplit(string,'e'); % Split the string where 'e' is
firstPart = stringParts(1); % Get the 1st part of stringParts which is the first part of standard form.
%split the number into two parts: 1.25690 -> 1 and 25690
strSplit = split((firstPart{1}),'.');
%extract the decimal
decimals = strSplit(2);
%Reshape the decimal
for i = 1:length(decimals{1})
k(i) = str2double(decimals{1}(i));
end
Sebastiano Marinelli
Sebastiano Marinelli on 11 Jun 2021
of course you can still mantain the 8 decimal, you only have to change a bit the code

Sign in to comment.

Answers (1)

Stephen23
Stephen23 on 11 Jun 2021
Edited: Stephen23 on 11 Jun 2021
x = 1.2569e-15;
v = regexprep(sprintf('%#.6g',x),{'\.','e.+'},'')-'0'
v = 1×6
1 2 5 6 9 0

Categories

Find more on Characters and Strings in Help Center and File Exchange

Community Treasure Hunt

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

Start Hunting!