проблема научной нотации Matlab

У меня проблема, когда 8-значная строка, такая как «313397E9», передается в Excel, а затем читается как число «313397000000000» или «3.133970e+014».

Затем он считывается Matlab и распознается как число, а не как строка. Какой самый простой способ преобразовать его обратно в 8-значную строку?

Заранее спасибо за вашу помощь.


person Alec    schedule 09.06.2011    source источник
comment
Вам нужно будет рассказать нам о механизме связи между MATLAB и Excel.   -  person David Heffernan    schedule 09.06.2011
comment
он использует actxserver для открытия Excel, затем получает конкретный лист, затем значение = (лист. Диапазон (['A2: A32000']). значение). Это все в большой базе кода, который я не писал и, вероятно, не должен с ним связываться. Есть ли способ преобразовать его обратно в 8-значный, когда это число?   -  person Alec    schedule 09.06.2011
comment
Как числа хранятся в MATLAB. Они действительно струны? И как вы хотите, чтобы они хранились в Excel? Строки или числа?   -  person David Heffernan    schedule 09.06.2011
comment
Если вы хотите остановить преобразование Excel в число, я думаю, вы должны иметь возможность использовать такие обозначения: '1234   -  person David Heffernan    schedule 09.06.2011
comment
Нет, слишком много электронных таблиц Excel, чтобы иметь дело с ними. Числа хранятся в Matlab как числа в массиве ячеек (все остальные значения в массиве ячеек являются строками, как и должно быть).   -  person Alec    schedule 09.06.2011
comment
Я пробовал num2str(value,'%E'), но это дает мне 3.133970E+014. Если бы я только мог получить строку с правильным возведением в степень, я мог бы разобрать ее.   -  person Alec    schedule 09.06.2011
comment
См. также: biomedcentral.com/1471-2105/5/80   -  person Jouni K. Seppänen    schedule 09.06.2011


Ответы (1)


Регулярные выражения вам в помощь! Вы можете использовать REGEXPREP, чтобы преобразовать конечные нули в Ex, где x — количество нулей, которые вы только что заменили.

%# convert the number to a string
nn = num2str(3.133970e+014)

nn =
313397000000000

%# replace zeros using regexprep
regexprep(nn,'([0]*)','E${num2str(length($1))}')
ans =
313397E9

Это также работает, если nn является массивом ячеек строк, кстати, поэтому вы можете преобразовать свой список чисел за один раз.

person Jonas    schedule 09.06.2011
comment
Вы восстанавливаете 313390000000000.0 в 313390E9 или 31339E10? - person Jouni K. Seppänen; 09.06.2011
comment
работает отлично! На самом деле, хорошая мысль, Джуни... Я думаю, нет никакого способа узнать, какой должна была быть ценность в первую очередь... - person Alec; 09.06.2011
comment
@Jouni: 313390000000000 преобразуется в 31339E10 - не уверен, действительно ли это предназначено для OP. Конечно, если идея заключалась в том, чтобы всегда иметь 6 цифр, за которыми следует E9, то все было бы довольно тривиально. Кроме того, 313390000000000.0 будет преобразовано в 313393E10.E1. Однако этот ввод не должен происходить, если вы начинаете с числа, например 3e+014. При необходимости это, конечно, можно исправить в регулярном выражении. - person Jonas; 09.06.2011
comment
Строка может быть либо 313390E9, либо 31339E10, но Excel преобразует обе в 3.13E+14. Однако более вероятно, что E ближе к концу, поэтому я думаю, что собираюсь использовать решение Джонаса, а не изменять 5000 электронных таблиц. - person Alec; 09.06.2011