You are now following this question
- You will see updates in your followed content feed.
- You may receive emails, depending on your communication preferences.
Change amount of significant figures or precision in array elements
35 views (last 30 days)
Show older comments
Is there a way to do this?
Example: In LabVIEW there is a thing called width and if you specify a width of 5 for some number, the maximum number of digits it can have will be 5. Is this possible in MATLAB?
Accepted Answer
Star Strider
on 2 Oct 2018
If you absolutely must do that, see the section in the round (link) function documentation on: Round Elements to Specified Number of Significant Digits (link).
That is likely not your best option. I would do the calculations with the data you have, and round the result to the requisite number of significant digits.
17 Comments
PromoCodeBSJ
on 2 Oct 2018
I have to put measurement data into a table that will go into a report generated by the report generator toolkit. Currently the measurement data will give me something like 4.69000000001 and I just want that to become 4.69. Will your answer do the trick?
Star Strider
on 2 Oct 2018
If this is any indication, it will:
x = 4.69000000001
y = round(x, 3, 'significant')
x =
4.69000000001
y =
4.69
PromoCodeBSJ
on 2 Oct 2018
What am I doing wrong?
RawDataChapter=Chapter('Raw Measurement Data');
b=size(Data)
Data
Data=array2table(round(Data,5'significant'));
Data=MATLABTable(Data);
add(RawDataChapter,Data);
James Tursa
on 2 Oct 2018
You are missing a comma between the 5 and the 'significant'
round(Data,5,'significant')
PromoCodeBSJ
on 2 Oct 2018
Edited: PromoCodeBSJ
on 2 Oct 2018
By the way, your code does not work. If you put format long and then run your code it just has a lot of 0s tacked behind it.
edit: actually maybe thats because i used format long
Star Strider
on 2 Oct 2018
Your array2table call (at least the one you posted) is missing a comma:
Data=array2table(round(Data,5'significant'));
↑
Data=array2table(round(Data,5,'significant'));
That aside, since (as I understand it), table data types inherit the current format setting, perhaps setting:
format short g
or whatever is appropriate, somewhere in your code before you display your table could work.
James Tursa
on 2 Oct 2018
Note that 4.69 cannot be represented exactly in IEEE double precision format. E.g.,
>> num2strexact(4.69)
ans =
4.69000000000000039079850466805510222911834716796875
Star Strider
on 2 Oct 2018
That is the result of ‘floating-point approximation error’.
The format short g and format long g options take this into account. Use one of them, and your table should display correctly.
PromoCodeBSJ
on 4 Oct 2018
The format short g/ long g are not working. My report still comes out with a ridiculous amount of numbers.
RawDataChapter=Chapter('Raw Measurement Data');
b=size(Data);
format short g
Data=array2table(round(Data,5,'significant'));
Data=MATLABTable(Data);
add(RawDataChapter,Data);
Star Strider
on 4 Oct 2018
OK. I do not have the MATLAB Report Generator. When I look through the online documentation, I cannot find anything about formatting the precision of the numerical entries in a MATLABTable.
This seems to me to be a significant oversight. I encourage you to report this as a bug. Use the Contact Us link in the upper right corner of this page, and in your message include the URL of this thread, so you don’t have to repeat the entire discussion and description.
Also, when you do that, have MATLAB open, and first run the ver command from a script or from your Command Window. You will need to copy and paste the output to the second window in your message.
Please post back here with anything of interest in the reply MathWorks sends you.
PromoCodeBSJ
on 5 Oct 2018
This is the response I got from Support:
Hello Eric,
Thank you for contacting MathWorks Technical Support Department. My name is Aaron and I am writing in reference to your Technical Support Case #03271769 regarding 'Formatting precision in MATLABTable'.
I understand that you would like to specify the precision displayed in a MATLAB Table when including the table in a generated report. Thank you for sharing the link to the MATLAB Answers forum page.
I have been in contact with the developers of MATLAB about this potential capability in the MATLAB Report Generator. Unfortunately, it is not currently possible to specify the precision of a table in the MATLAB Report Generator. The developers of MATLAB are currently considering implementing this feature in a future release of the program.
In the meantime, there are a couple of potential workarounds to consider:
1. Consider first rounding the entries of the table using the 'round' function and then converting the rounded numbers to strings. This will ensure that the table entries are displayed in the desired precision. For an example of how to do this, please refer to the attached file named 'TablePrecisionRound.m' and the comments in the file.
For more information about the 'round' function, please refer to the following link:
https://www.mathworks.com/help/matlab/ref/round.html
2. Consider using the 'compose' function with a specified number format in order to convert the numbers to string arrays. By using the 'compose' function, a custom precision or number format can be easily specified. As an example of how to do this in MATLAB, please refer to the attached file named 'TablePrecisionCompose.m' and the comments in the file.
For more information about the 'compose' function, please refer to the following link:
https://www.mathworks.com/help/matlab/ref/compose.html
Please note that I certainly understand that each of the workarounds above are not ideal. You can be assured that the developers are considering implementing the feature in a future release.
For now, I will tentatively close this case from an administrative perspective. However, please let me know if there are any additional related questions as I would be happy to re-open the case and assist.
Sincerely,
Aaron Zakrzewski MathWorks Technical Support Department
Star Strider
on 5 Oct 2018
Thank you for posting that.
I’m relieved to know that the formatting capability doesn’t exist, and that I didn’t miss something.
More Answers (0)
See Also
Categories
Find more on Continuous Waveforms in Help Center and File Exchange
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!An Error Occurred
Unable to complete the action because of changes made to the page. Reload the page to see its updated state.
Select a Web Site
Choose a web site to get translated content where available and see local events and offers. Based on your location, we recommend that you select: .
You can also select a web site from the following list
How to Get Best Site Performance
Select the China site (in Chinese or English) for best site performance. Other MathWorks country sites are not optimized for visits from your location.
Americas
- América Latina (Español)
- Canada (English)
- United States (English)
Europe
- Belgium (English)
- Denmark (English)
- Deutschland (Deutsch)
- España (Español)
- Finland (English)
- France (Français)
- Ireland (English)
- Italia (Italiano)
- Luxembourg (English)
- Netherlands (English)
- Norway (English)
- Österreich (Deutsch)
- Portugal (English)
- Sweden (English)
- Switzerland
- United Kingdom(English)
Asia Pacific
- Australia (English)
- India (English)
- New Zealand (English)
- 中国
- 日本Japanese (日本語)
- 한국Korean (한국어)