File Exchange

image thumbnail


version 6.1 (651 KB) by Harry Dymond
Convert numbers to engineering notation strings, or use SI-prefixes instead. Offers extensive customisation. Also works on axes tick labels.


Updated 30 May 2021

View Version History

View License

Converts an input numerical value into an engineering-formatted string (as a character vector), in either scientific format with multiples-of-three exponent, or using SI prefixes e.g. k, M, n, p etc. It can also process the tick labels of graphs and colorbars. Please see the Examples tab for an extensive list of num2eng examples.
What makes this submission unique amongst the several num2eng and num2si functions on the file exchange is that it:
• Supports scalar, vector, and matrix inputs
• Can process axes and colorbar tick labels, including keeping the tick labels up-to-date if the ticks change (e.g. due to limit change, figure resize, etc.)
• Supports complex number inputs
• Properly handles edge-cases such as rounding, empty inputs, Inf, NaN, non-numerical inputs etc.
• Uses either SI prefixes or engineering-formatted scientific notation
• Optionally uses the Greek lower-case mu (Unicode U+03BC) as the SI prefix for numbers with magnitude in the range [1e-6, 1e-3)
• Optionally uses the true minus character (Unicode U+2212) instead of hyphen-minus (U+002D) for negative numbers
• Optionally uses the infinity symbol (Unicode U+221E) for infinite inputs
• Optionally pads output strings using left or right justification
• Optionally inserts trailing zeros to pad output string to the specified number of significant figures
• Optionally outputs as a unified character vector for vector and 2D array inputs, rather than the default cell array of character vectors
• Optionally prevents use of exponent or SI prefix for numbers with magnitude in the range [0.1, 1) (i.e., tenths)
• When not using SI prefixes:
-- Optionally pads the exponent with zeros to a specified width
-- Optionally only shows a sign character in the exponent for negative exponents
-- Optionally forces the exponent to always be included, even if it is zero
-- Offers the choice of lower-case e, capital E, or small capital E (Unicode U+1D07) for the exponent
• Optionally forces the mantissa to lie in the range [0.001, 1), rather than the more usual [1, 1000). One reason to use this option is to unambiguously convey accuracy via the number of significant figures in the output.
• Optionally uses a comma, instead of a point, as the decimal separator
• Allows the user to specify the units, to be appended to the end of the string (with additional control over whether this word is automatically pluralised or not)
The function has two alternative call syntaxes:
1. string = num2eng(number,[useSI],[useMu],[spaceAfterNum],[sigFigs],[fullName],[useMinus],[useInf],[trailZeros],[pad],[cellOutput]), where input variables in square brackets are optional - i.e. The function accepts anywhere from 1 to 11 inputs, inclusive.
2. string = num2eng(number,optionsStruct), where the control options are passed in a structure. This syntax offers more options than syntax one.
Using an options structure instead of individual option inputs:
When num2eng was originally developed, the individual option-input approach was selected in order to make function hints as helpful as possible. However, as the number of options has grown, the function call has become unwieldy, especially if you only want to set one of the later options and leave the others at the default value. It’s also difficult to see at a glance what options are being used in a call to num2eng, when reading code that you’ve written earlier. This is where using syntax 2 comes in. You can pass num2eng an options structure as the second input. This structure can have anywhere from one to 21 fields, named as per the options listed above, with the additional options: noExp4Tenths, expWidth, expSign, expForce, unit, noPlural, capE, smallCapE, fracMant, useComma, axes.

Cite As

Harry Dymond (2020). num2eng (, MATLAB Central File Exchange.

Comments and Ratings (10)

Laurenz Wernicke

Wow, amazing script! Must have been a lot of work... Thanks a lot.


Works great!, thank you!

mohammad Hedayati

Great work and thanks a lot.
This is awesome and what I was long looking for.

Daniel Hinrichsen

Josh Philipson

Angelos Kalitzeos

Chang hsiung

Great, now it works. Thanks a lot.

Harry Dymond

Hello again @Chang hsiung. I believe the problem was with use of the iptnum2ordinal function. Somehow, my copy of MATLAB managed to execute the iptnum2ordinal function without checking out a license to the image processing toolbox! Anyway, I have now replaced calls to that function so you should be able to use num2eng now.

Harry Dymond

@Chang hsiung, thank you for your interest in my function. What version of MATLAB are you using? The function was developed in MATLAB version 2016a, and according to my testing, should not require the Image Processing Toolbox. If you are using at least version 2016a of MATLAB, please could you let me know the exact num2eng call you are making?

Chang hsiung

Do you have a version that does not require Image Processing toolbox ???

MATLAB Release Compatibility
Created with R2018a
Compatible with R2014b and later releases
Platform Compatibility
Windows macOS Linux

Community Treasure Hunt

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

Start Hunting!

num2eng documentation