[Product update] Infrastructure Analysis Tool is now available with Business Accounts.Learn More
Experts Exchange Solution brought to you by
"The solutions and answers provided on Experts Exchange have been extremely helpful to me over the last few years. I wear a lot of hats - Developer, Database Administrator, Help Desk, etc., so I know a lot of things but not a lot about one thing. Experts Exchange gives me answers from people who do know a lot about one thing, in a easy to use platform." -Todd S.
Dim a As Double
a = 12.333
MsgBox (FormatNumber(a, 2))
'gives Output as 12.33
Open in new window
Facing a tech roadblock? Get the help and guidance you need from experienced professionals who care. Ask your question anytime, anywhere, with no hassle.
'Returns input number rounded to specified number of significant figures.
Function FormatSF(dblInput As Double, intSF As Integer) As String
Dim intCorrPower As Integer 'Exponent used in rounding calculation
Dim intSign As Integer 'Holds sign of dblInput since logs are used in calculations
FormatSF = "0" 'default
'-- Store sign of dblInput --
intSign = Sgn(dblInput)
If dblInput <> 0# Then 'dblInput cannot be zero or Log10 will crash
'-- Calculate exponent of dblInput --
intCorrPower = Int(Log10(Abs(dblInput)))
FormatSF = Round(dblInput * 10 ^ ((intSF - 1) - intCorrPower)) 'integer value with no sig fig
FormatSF = FormatSF * 10 ^ (intCorrPower - (intSF - 1)) 'raise to original power
'-- Reconsitute final answer --
'FormatSF = FormatSF * intSign 'deactivated to fix negative values
'-- Answer sometimes needs padding with 0s --
If InStr(FormatSF, ".") = 0 Then
If Len(FormatSF) < intSF Then
FormatSF = Format(FormatSF, "##0." & String(intSF - Len(FormatSF), "0"))
If intSF > 1 And Abs(FormatSF) < 1 Then
Do Until Left(Right(FormatSF, intSF), 1) <> "0" And Left(Right(FormatSF, intSF), 1) <> "."
FormatSF = FormatSF & "0"
From novice to tech pro — start learning today.
Premium members can enroll in this course at no extra cost.