2017-02-01 3 views
-1

以下のコードを使用して行列を読み込み、すべての値の最後にセミコロン(;)と改行を適用します。Matlab fprintf小数点以下14桁までの丸めの正しい書式指定子

精度フォーマット指定子に問題があります。コードブロックの下には、csv出力からの行があります。列5と6は適切に書式設定されていますが、小数点以下14桁に四捨五入する必要がある指数値があります。 4行目の '%f.14'がこれを行うのはなぜですか?私はそれが指数表記を使用していないと思った?

function write_to_csv(filepath, decision) 
    csv = fopen('matrix.csv', 'a+'); 
    for ii = 1:length(decision) 
     format = '%d; %f.14'; 
     fprintf(csv, format, decision(ii)); 
    end 
    fprintf(csv,'\n') 
    fclose(csv); 
end 

1; 1.032204e-03; -2.580511e-04; 1; 32190201170708; 17682101210450; 2; 7.600000e-01; -1;質問から上記のコードを供給するためのMChandlerへ

クレジット:Add a delimiter to end of each line of csv file MATLAB

+6

は ''%の.14f持つ%のf.14'を交換してください'。詳細については、[documentation](https://mathworks.com/help/matlab/ref/fprintf.html?requestedDomain=www.mathworks.com#input_argument_formatSpec)を参照してください。 – codeaviator

+1

明確にするために '-2.580511e-04'を' -0.00025805110000'としてレンダリングしますか? – toshiomagic

+0

はい私はtoshiomagicを行います – Lucas

答えて

1

これは変数decisionの形式によって異なります。 %f.14の前に%dがあるので、1次元の行列を%dとしてレンダリングします。固定小数点フォーマット指定子は完全に無視されます。あなたのマトリックスの決定が実際に1次元であればコメントで述べたように、format = '%.14f';を使用します。

function write_to_csv(filepath, decision) 
    csv = fopen('matrix.csv', 'a+'); 
    for ii = 1:length(decision) 
     format = '%.14f'; 
     fprintf(csv, format, decision(ii)); 
    end 
    fprintf(csv,'\n') 
    fclose(csv); 
end 

をあなたがここに書式指定子上に読むことができます:https://www.mathworks.com/help/matlab/matlab_prog/formatting-strings.html#bq0z60p-1

関連する問題