xlswrite precision problem

Hi!
I have a huge amount of data in array (60000x17) with precision of 3 decimal places. After some operations I would like to save that array in excel file by using xlswrite command. The problem is that whenever I do that the excel file become where huge because all the numbers are stored as double (15 decimal places).
So my question is how can you store an array with only 3 decimal places by using xlswrite command?
I also tried to transform numbers into single before saving but it didn't work.
thank you in advance!

 Réponse acceptée

Ken Atwell
Ken Atwell le 17 Fév 2012

0 votes

xlswrite does not provide this option itself.
You could do the rounding in MATLAB before committing to file:
A=rand(3)
xlswrite('foo.xlsx', round(A*1e3)/1e3);
This should mostly work, but I suppose there may be cases where an exported value can be ?.???99999999999999 or some such. There may be a better numerical way to do this kind of round, but I don't know what it might be.

Plus de réponses (1)

Image Analyst
Image Analyst le 17 Fév 2012

0 votes

That's only 1,020,000 elements. Hardly huge at all. Even with double precision (8 bytes per number), your file is only about 8 megabytes, right? That's not even as big as a run of the mill point and shoot camera image. Why do you need to make this tiny file even smaller? What kind of file sizes are you getting from Excel?

1 commentaire

Rok mr
Rok mr le 18 Fév 2012
the problem was that I used xslwrite('hhh.xls',...) and not a newer extension of excel .xlsx.
In first case if I tried to merge 5 arrays (60000x17) on a separate sheets in one file it was 100MB. But if I use .xlsx the file is 40MB and it's okay.

Connectez-vous pour commenter.

Community Treasure Hunt

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

Start Hunting!

Translated by