Matlab-fprintf精度格式问题

Matlab-fprintf精度格式问题,matlab,printf,Matlab,Printf,我一直在尝试使用MATLAB以确定的格式将某些值保存到文本文件中。例如,我需要将数字85存储为.85E+2(实际上是.85D+2,RINEX格式)。但我只能获得8.5E+1 那么,如何将这些值存储为.XXXE+n呢 fileID = fopen('Rinexn.txt','w'); fprintf(fileID,' %0.13e', eph.IODE_sf3); fclose(fileID); 您可以使用以下方法: num = 85; pow = floor(log10(abs(num)))+

我一直在尝试使用MATLAB以确定的格式将某些值保存到文本文件中。例如,我需要将数字85存储为.85E+2(实际上是.85D+2,RINEX格式)。但我只能获得8.5E+1

那么,如何将这些值存储为.XXXE+n呢

fileID = fopen('Rinexn.txt','w');
fprintf(fileID,' %0.13e', eph.IODE_sf3);
fclose(fileID);

您可以使用以下方法:

num = 85;
pow = floor(log10(abs(num)))+1;
sprintf('%.3fE%+d', num/10^pow, pow)
或者在您的情况下:

pow = floor(log10(abs(eph.IODE_sf3)))+1;
fprintf(fileID,'%.3fE%+d', eph.IODE_sf3/10^pow, pow );

根据rahnema1的回答,但更符合问题中指定的格式(正好是3个有效数字,没有前导零,
D
作为求幂字符):

对于高效/方便的矢量化(
N
是一个矢量):

Ns=[符号((符号(N)<0)+1)
num2单元(圆形(绝对值)(N(:)../10.^(功率(:).-3)))
num2cell(pow(:)');
fprintf(文件ID,。。。
“%s.%dD%+d\n”。。。
Ns{:});

RINEX将标志放在哪里?
signs = {'+' '-'};
pow   = floor(log10(abs(N))) + 1;
fprintf(fileID,...
        '%s.%dD%+d\n', ...
         signs{(sign(N) < 0) + 1}, ...
         round(abs(N)/10^(pow-3)),...
         pow);
signs = {' ' '-'};
Ns = [signs((sign(N) < 0) + 1)
      num2cell(round(abs(N(:).') ./ 10.^(pow(:).'-3)))
      num2cell(pow(:)')];

fprintf(fileID,...
        '%s.%dD%+d\n', ...
         Ns{:});