Change the exponent precision
Show older comments
I need to display, using fprintf, an exponent with this precision 1.7800e-005. I can set the precision for the 1.7800 part but do not know how to set the precision for the 005 part. I don't want the default 05, I need 005. Thanks
Answers (1)
Star Strider
on 2 Oct 2015
Edited: Star Strider
on 4 May 2021
I didn’t realise MATLAB no longer printed out three-digit exponents by default. This may seem a long way round, but ‘expstr’ works for both +ve and -ve exponents:
Q1 = pi/10000;
expstr = @(x) [x*10.^floor(1-log10(abs(x))) floor(log10(abs(x)))];
Result = sprintf('%.4fe%+04d', expstr(Q1))
Result =
3.1416e-004
EDIT — Added abs(x) to log10 arguments in the ‘expstr’ function.
—————
EDIT — (4 May 2021 at 16:38)
Correcting my ‘expstr’ function to not crash on a 0 argument turned out to be surprisingly straightforward —
expstr = @(x) [x(:).*10.^ceil(-log10(abs(x(:)+(x==0)))) floor(log10(abs(x(:)+(x==0))))]; % Updated: 2021 05 04
Given:
Q1 = [-pi*1000; 0; pi/1000];
Result = sprintf('%8.4fe%+04d\n', expstr(Q1).')
.
3 Comments
@Star Strider: AFAIK there has never been a default number of digits for the exponent, and the MATLAB Xprintf commands depend on the underlying C printf commands, which are completely dependent on the operating system and hardware. In fact the old help (2010b) even states this explicitly:
"Different platforms display exponential notation (such as %e) with a different number of digits in the exponent."
Platform Example
Windows 1.23e+004
UNIX 1.23e+04
And it gives all of its other examples using two digits (so presumably someone at TMW was using *unix):
%e Exponential notation, such as 3.141593e+00
%E Same as %e, but uppercase, such as 3.141593E+00
The contemporary help online seems to have removed these comment, so perhaps TMW has made some internal adjustments to the C commands... in any case, for historical reasons it would pay not to assume three digits of exponent precision.
Star Strider
on 3 Oct 2015
When I first began using MATLAB 20+ years ago (always on Windows), a three-digit exponent was standard. I don’t remember when it changed (I have other things to keep track of), but in R2015b, a two-digit exponent is standard. Thus the reason for the specific three-digit exponent format here.
Categories
Find more on Resizing and Reshaping Matrices 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!