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.