Significant figures in table

32 visualizaciones (últimos 30 días)
Kosta
Kosta el 6 de Mzo. de 2016
Respondida: Peter Perkins el 7 de Mzo. de 2016
Hello,
I am having this project where I have to make large amounts of data in to .csv files. To do this, as you see below, I am making a table, that I can later on export as a .csv file. That works perfectly, the problem is that I would like my data on the generated table to be presented at two decimal points, (i.e. not 1 but 1.00).
Here is the code that i have written to generate the table:
T={ 'a' 'b' 'c' 'd' 'e' 'f' 'g' 'h'; 3.19 0.25 67.1 66.7 70.3 13.0 45.0 55.2; 3.11 0.92 63.4 65.0 69.5 15.2 27.5 36.0; 3.11 1.24 62.0 64.1 69.0 12.2 22.4 30.5; 3.10 1.73 61.0 62.7 68.5 11.2 19.3 25.6; 3.06 2.09 59.3 62.0 67.9 10.7 17.7 23.1; 3.05 2.18 57.8 60.7 67.0 9.9 16.4 21.6; 2.91 0.43 67.8 65.1 63.1 11.0 33.4 46.8; 2.90 0.64 68.3 64.4 62.4 10.5 26.4 39.3; 2.88 1.22 68.0 63.2 60.3 10.2 20.1 29.1; 2.24 1.73 67.7 62.5 59.4 11.2 18.6 25.7; 2.85 2.08 66.9 61.3 58.1 10.7 17.0 23.3; 2.84 2.18 65.9 60.1 56.8 9.3 15.3 21.1};
C=T(2:end,:); %Excluding Column Names
Initial_Data=cell2table(C); %Making Table
Initial_Data.Properties.VariableNames=T(1,:); %Insert Desired Heading
-------------
Thanks in advance for your help.

Respuesta aceptada

Jan
Jan el 6 de Mzo. de 2016
Do you need the redirection of the table object? You can create the CSV-file directly:
T = { 'a' 'b' 'c' 'd' 'e' 'f' 'g' 'h'; ...
3.19 0.25 67.1 66.7 70.3 13.0 45.0 55.2; ...
3.11 0.92 63.4 65.0 69.5 15.2 27.5 36.0}; % Abbrev. test data
fid = fopen(FileName, 'w');
if fid == -1, error('Cannot open file: %s', FileName); end
nCol = size(T, 2);
fmt = repmat('%s, ', 1, nCol);
fmt(end-1:end) = '\n';
fprintf(fid, fmt, T{1, 1:nCol});
fmt = repmat('%.2f, ', 1, nCol); % <- Determine the number format here!
fmt(end-1:end) = '\n';
Data = cell2mat(T(2:end, :)).';
fprintf(fid, fmt, Data);
fclose(fid);
  2 comentarios
Kosta
Kosta el 6 de Mzo. de 2016
Thank you Jan for your answer, it definitely works for the specific example.
The reason that I want to convert my data into a table, is because this way I seem to be quite flexible when adding characters (something like 'WBT') in the columns of the table. But that is not really a problem since I imagine it will be easy to find a way to isolate the columns.
What I would be curious to know if you can help me, is if I want to have different precision for different columns, how would I handle this. (For example if I wanted the first two columns to have 1.00 format, and the rest 1.0 format).
Again, thanks for your answer.
Jan
Jan el 6 de Mzo. de 2016
fmt = ['%.1f, ', repmat('%.2f, ', 1, nCol - 2), '%.2f\n']

Iniciar sesión para comentar.

Más respuestas (1)

Peter Perkins
Peter Perkins el 7 de Mzo. de 2016
For numeric variables, tables respect the long/short precision of the current command window setting, but do so using either format g or format e. If your command window is set to format short, for example, a table will display using format short g. If your command window is set to format long g, a table will display using format long g. Etc.
You can also use format bank, which may solve your original question.
The real answer, though, is that tables are designed for more data manipulation than for pretty printing, so if your goal is to get a specific display to copy/past into a report, you are probably better off doing the sort of thing Jan suggests.

Productos

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!

Translated by