Matlab - fprintf精度格式问题

时间:2016-11-28 18:57:14

标签: 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);

2 个答案:

答案 0 :(得分:1)

您可以使用此方法:

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 );

答案 1 :(得分:0)

基于rahnema1的答案,但更符合问题中指定的格式(正好3位有效数字,没有前导零,D为指数字符):

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);

N是你的号码。如果您不希望明确+为正值,请从单元格中删除+

signs = {' ' '-'};

为了有效/方便的矢量化(N是矢量):

Ns = [signs((sign(N) < 0) + 1)
      num2cell(round(abs(N(:).') ./ 10.^(pow(:).'-3)))
      num2cell(pow(:)')];

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