 # 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. 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 ; "?" ) )