Make num2str in engineering format

83 views (last 30 days)
Hey, I'm writing this code:
disp(['Cutoff frequency: ',num2str(wcutoff,'%e')]);
and this displays the frequency in an normal exponential format, but I want it to be in eng format. This means that instead of:
I want it to show:
Is that possible? A possible workaround could be to use "format shortEng" and than separate the display code into 2 lines, but than I need to find a way that it'll display it in one output line or something like that...

Accepted Answer

Yoav Romach
Yoav Romach on 7 Mar 2014
Edited: Yoav Romach on 7 Mar 2014
Ok, I've actually came up with a better, simpler solution:
format shortEng
disp([' Cutoff frequency: ', strtrim(evalc('disp(wcutoff)'))]);
strtrim is needed because the evalc returns numerous leading and trailing white space, but this produces exactly the output I wanted, without the helper function.

Sign in to comment.

More Answers (3)

Steven Lord
Steven Lord on 22 Nov 2021
If you're using release R2021a or later I would use formattedDisplayText instead of evalc.
wcutoff = 5.2e10;
t = formattedDisplayText(wcutoff, 'NumericFormat', 'shortEng')
t =
" 52.0000e+009 "

Harry Dymond
Harry Dymond on 16 Jul 2019
For the benifit of those stumbling across this old thread in search of answers: my FEX submission num2eng will do what the OP is asking for.

Jos (10584)
Jos (10584) on 7 Mar 2014
A similar effect can be obtained by manipulating the string rather than the numbers
X = 52346574 ;
s1 = sprintf('%.2e',X)
v = sscanf(s1,'%d.%de%d')
s2 = sprintf('%d%.1fe%02d',v(1), v(2)/10, v(3)-1)
disp(['Cutoff frequency: ', s2]);
Which can be made into a function handle:
Val2EngString = @(X) sprintf('%d%.1fe%02d',[1 .1 1] .* sscanf(sprintf('%.2e',X),'%d.%de%d').' - [0 0 1])
  1 Comment
Star Strider
Star Strider on 7 Mar 2014
I never considered that approach. I’ll take a look at it.

Sign in to comment.

Community Treasure Hunt

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

Start Hunting!