В вашем коде вы присваиваете строку массиву с плавающей запятой.Похоже, MATLAB автоматически преобразует строку в двойную, чтобы сохранить ее там.Таким образом, ваше форматирование теряется:
>> sprintf("%.1e", 1/1000)
ans =
"1.0e-03"
>> a=0;
>> a(1) = sprintf("%.1e", 1/1000)
a =
1.0000e-03
>> class(a)
ans =
'double'
Вместо этого используйте строковый массив:
a = strings(19,1);
%...
a(i-1) = sprintf("%.1e", w);
Я не привык к новым строкам, и это поведение меня удивляет,Присвоение числа строке преобразует число в строку, а присвоение строки числу преобразует ее обратно в число.Этого не происходит со «старомодными» массивами символов:
>> a=0;
>> a(1) = sprintf('%.1e', 1/1000);
Unable to perform assignment because the left and right sides have a different number of elements.
При использовании массивов символов храните их в массиве ячеек:
a = cell(19,1);
%...
a{i-1} = sprintf('%.1e', w);