Change the exponent precision

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)

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: 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.
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

Asked:

on 2 Oct 2015

Edited:

on 4 May 2021

Community Treasure Hunt

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

Start Hunting!