2016-11-28 176 views
2

我被困在一個文本文件中保存使用MATLAB確定格式的某些值。例如,我需要將數字85存儲爲.85E + 2(實際上是.85D + 2,RINEX格式)。但我只能獲得8.5E + 1。Matlab - fprintf精度格式問題

那麼,我該如何將值存儲爲.XXXE + n呢?

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

哪裏RINEX放標誌? –

回答

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); 
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{:});