РЕДАКТИРОВАТЬ : я перефразировал вопрос, чтобы быть более ясным.
Кто-нибудь знает умный способ заставить sprintf напечатать "% .6f с удаленными конечными нулями"? Вот что я ищу:
sprintf('%somemagic ', [12345678 123.45])
ans = 1234578 123.45
где% somemagic - магический спецификатор. Кажется, ни один из форматов не работает.
% no trailing zeros, but scientific for big nums
sprintf('%g ', [12345678 123.45])
ans = 1.23457e+007 123.45
% not approp for floats
sprintf('%d ', [12345678 123.45])
ans = 12345678 1.234500e+002
% trailing zeros
sprintf('%f ', [12345678 123.45])
ans = 12345678.000000 123.450000
% cannot specify sig figs after decimal (combo of gnovice's approaches)
mat = [12345678 123.45 123.456789012345];
for j = 1:length(mat)
fprintf('%s ', strrep(num2str(mat(j),20), ' ', ''));
end
Я не думаю, что есть способ сделать это, кроме циклического прохождения каждого элемента и изменения спецификатора на основе mod (x, 1) == 0 или использования регулярного выражения для удаления конечных нулей. Но вы никогда не знаете, толпа умнее меня.
Мое настоящее приложение - распечатывать элементы массива в HTML-таблице. Это мое текущее неуклюжее решение:
for j = 1:length(mat)
if mod(mat(j),1) == 0
fprintf('<td>%d</td>', mat(j));
else
fprintf('<td>%g</td>', mat(j));
end
end