Str2double gives NaN

26 views (last 30 days)
Praveen Kumar
Praveen Kumar on 30 Jan 2023
Edited: Stephen23 on 2 Feb 2023
X = ["3.716,3.711,3.719,3.714,3.714,3.711,3.722,3.712,3.715,3.715,3.717,3.721,3.713,3.714,0.000"];
Y = str2double(X);
I am trying to convert the above string to double. However, using above code, the Y value is 'NaN'.
'str2num(X)' gives appropriate/required results.
Y = [3.71600000000000 3.71100000000000 3.71900000000000 3.71400000000000 3.71400000000000 3.71100000000000 3.72200000000000 3.71200000000000 3.71500000000000 3.71500000000000 3.71700000000000 3.72100000000000 3.71300000000000 3.71400000000000 0]
However, 'str2num' is not supported in code generation. Is there any alternative?

Accepted Answer

Stephen23
Stephen23 on 30 Jan 2023
X = "3.716,3.711,3.719,3.714,3.714,3.711,3.722,3.712,3.715,3.715,3.717,3.721,3.713,3.714,0.000";
str = X{1}; % character vector
idx = str==',';
idy = diff([true,idx,true]);
idb = find(idy<0);
ide = find(idy>0)-1;
num = numel(idb);
tmp = cell(num,1);
for k = 1:num
tmp{k} = str(idb(k):ide(k));
end
vec = str2double(tmp)
vec = 15×1
3.7160 3.7110 3.7190 3.7140 3.7140 3.7110 3.7220 3.7120 3.7150 3.7150
  8 Comments
Praveen Kumar
Praveen Kumar on 2 Feb 2023
Thank you very much. Understood!

Sign in to comment.

More Answers (2)

Askic V
Askic V on 30 Jan 2023
Try this:
X = "3.716,3.711,3.719,3.714,3.714,3.711,3.722,3.712,3.715,3.715,3.717,3.721,3.713,3.714,0.000";
newStr = split(X,',')
Y = str2double(newStr)
  1 Comment
Praveen Kumar
Praveen Kumar on 30 Jan 2023
Thanks for the quick response. Even though the code works, 'split' is not supported in C/C++ code generation.

Sign in to comment.


Askic V
Askic V on 30 Jan 2023
Edited: Askic V on 30 Jan 2023
I would also like to suggest this solution:
X = "3.716,3.711,3.719,3.714,3.714,3.711,3.722,3.712,3.715,3.715,3.717,3.721,3.713,3.714,0.200";
f = strfind(X, ","); % find indices of delimiter
Y = zeros(1, numel(f)+1); % initialize output array
X_char = convertStringsToChars(X);
j = 1;
for i = 1:numel(f)
start = j;
Y(i) = str2double(X_char(j:f(i)-1));
j = f(i)+1;
end
Y(end) = str2double(X_char(f(i)+1:end)); % add last element
Y
Y = 1×15
3.7160 3.7110 3.7190 3.7140 3.7140 3.7110 3.7220 3.7120 3.7150 3.7150 3.7170 3.7210 3.7130 3.7140 0.2000

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!