 # EngNotation ( number ; digits )

Express a number in engineering notation     Average rating: 4.3 (27 votes) Log in to vote Paul Smith unafilliated http://facebook.com/psmithw
Sample input:
EngNotation ( -.0000400001195 ; 8 )
Sample output:
-40.000120 μ

Function definition: (Copy & paste into FileMaker's Edit Custom Function window)

Uses standard engineering symbols from fempto to peta and "e" notation for values outside those limits.

Expresses all values in powers of 10^3, so ".4" would be "400 m". rounds to the number of digits passes to the function.

Non-recursive due to the use of the logarithm function.

## Comments comment, VRFeb 21, 2015 Couldn't this be simpler? Compare: http://www.briandunning.com/cf/220 Paul Smith, NCFeb 24, 2015 /* Edit: some bug fixes for number rounding and refactored code for readability */ /* EngNotation ( number; digits ) EngNotation ( -.0000400001195 ; 8 ) >>> -40.000120 μ Uses standard engineering symbols from fempto to peta and "e" notation for values outside those limits. Non-recursive due to the use of the logarithm function. */ Let ( [ numAbs = Abs ( number ) ; numSign = If ( number < 0 ; "-" ; "" ) ; digitsPower = If ( numAbs ; Floor ( Log ( numAbs ) ) ; 0 ) ; digits10e3s = Div ( digitsPower ; 3 ) ; digits10e1s = digits10e3s * 3 ; roundPlaces = ( digits + digits10e1s ) - ( digitsPower + 1 ) ; precisePlaces = 3 + digits - digitsPower ; numTerm = Round ( SetPrecision ( numAbs / ( 10 ^ digits10e1s ) ; preciseplaces ) ; roundplaces ) ; zerosAdd = digits + GetAsBoolean ( PatternCount ( numTerm ; "." ) ) - Length ( numTerm ) ; zerosExtra = Right ( SerialIncrement ( "0" ; SetPrecision ( 10 ^ ( zerosAdd ) ; zerosAdd + 1 ) ) ; zerosAdd ) ; outTerm = numTerm & If ( zerosAdd > 0 ; If ( not GetAsBoolean ( PatternCount ( numTerm ; "." ) ) ; "." ) & zerosExtra ) ; ePower = "e" & If ( Abs ( digits10e1s ) = digits10e1s ; "+" ) & ( digits10e1s ) ; eSymbol = GetValue ( If ( digits10e3s < 0 ; " m¶ μ¶ n¶ p¶ f" ; " K¶ M¶ G¶ T¶ P" ) ; Abs ( digits10e3s ) ) ; outSymbol = If ( Abs ( digits10e3s ) > 5 ; ePower & " " ; eSymbol ) ] ; If ( IsValidExpression ( numSign & outTerm & ePower ) ; numSign & outTerm & outSymbol ; "?" ) )

Note: these functions are not guaranteed or supported by BrianDunning.com. Please contact the individual developer with any questions or problems.

# Support this website.

This library has been a free commmunity resource for FileMaker users and developers for 15 years. It receives no funding and has no advertisements. If it has helped you out, I'd really appreciate it if you could contribute whatever you think it's worth: