Я читаю из файла excel. В одном из столбцов (который включает только очень длинные номера) MATLAB импортировал его как CELL (потому что есть заголовок).Преобразование MATLAB: CELL to DOUBLE; Но цифры меняются
Это образец импортирован:
'980000684210053338'
Это мои попытки:
Преобразует в DOUBLE, но цифры меняются
tableM.v1 = cellfun(@str2num,tableM.v1);
Преобразование в DOUBLE, но цифры меняются
tableM.v1 = cellfun(@str2double,tableM.v1);
Преобразование в CHAR, но номера являются правильными
tableM.v1 = cell2mat(tableM.v1);
Как преобразовать этот CELL, чтобы удвоить, сохраняя при этом правильные значения?
P.S. Я использую MATLAB R2016a.
UPDATE:
Я побежал этот код из ответов:
tableM.v1 = vpa(tableM.v1); % assuming tableM.v1 is a cellstr
И я получил эту ошибку:
Warning: Support of strings that are not valid variable names or define a number will be removed in a future release. To create symbolic expressions, first create symbolic variables and then use operations on them.
In sym>convertExpression (line 1536)
In sym>convertChar (line 1441)
In sym>tomupad (line 1198)
In sym (line 177)
In cell2sym (line 28)
In sym>tomupad (line 1208)
In sym (line 177)
In vpa (line 44)
Error using symengine
New array must have the same number of elements as the original array.Error in sym/reshape (line 50)
ySym = mupadmex('symobj::reshape',x.s,args{:});Error in cell2sym (line 34)
S = reshape(sym([Csym{:}]), size(C));Error in sym>tomupad (line 1208)
xsym = cell2sym(x);Error in sym (line 177)
S.s = tomupad(x);Error in vpa (line 44)
ss = sym(s);
Nice +1. Я был очень удивлен, увидев, что у MATLAB еще нет набора 'str2int * '. Внутреннее «двойное» литье также действительно странно и раздражает. Я заметил это, по какой-то причине, происходит при преобразовании нескаляра VPA в 'uint64':' str = '980000684210053338'; disp (uint64 (vpa (str))); disp (uint64 (vpa (repmat ({str}, 1,2)))); 'производит разные результаты, что смешно. – TroyHaskin
Это, похоже, работает, хотя одна небольшая проблема. Он преобразует «0,0090» в «90» или «3,5610» в «305610». – PeyM87
Ваш пример не включает символы, отличные от цифр. Вот почему я добавил последнее предупреждение об ошибке. Функция также предполагает, что ваши входы уже целые, а не плавающие, потому что вы не указали, что это вариант. Для поиска десятичного индикатора потребуется несколько дополнительных шагов, а затем усечь число. – craigim