Change the exponent precision

14 views (last 30 days)
student187
student187 on 2 Oct 2015
Edited: Star Strider on 4 May 2021
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
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
ans = 3.1416e-04
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).')
Result =
' -3.1416e+003 0.0000e+000 3.1416e-003 '
.
  3 Comments
Star Strider
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.
Thomas
Thomas on 4 May 2021
Edited: Thomas on 4 May 2021
Yes, 2015 is log ago...
I have the same problem as mentioned above. Unfortunately, the suggested solution does not work if Q1 = 0.

Sign in to comment.

Categories

Find more on Desktop 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!