LeighWardle
asked on
VB6 function to format floating point number rounded to specified number of significant figures
Hi Experts,
I am looking for a VB6 function that will format floating point numbers (say doubles) rounded to a specified number of significant figures.
I do not want scientific format.
Regards,
Leigh
I am looking for a VB6 function that will format floating point numbers (say doubles) rounded to a specified number of significant figures.
I do not want scientific format.
Regards,
Leigh
ASKER
om_prakash_p:
That code does not work for all inputs, for example:
when a = -0.00000033358
the output should be -0.00000033, but your code gives 0.00
That code does not work for all inputs, for example:
when a = -0.00000033358
the output should be -0.00000033, but your code gives 0.00
The code simply formats the number and displays the number of 0's required after decimal.
So the output for
a = -0.00000033358
is
0.00
If you round variable "a"
MsgBox (Round(a, 8))
then you get the output you want.
Even this will not work for all cases. you need to handle those conditions separately.
So the output for
a = -0.00000033358
is
0.00
If you round variable "a"
MsgBox (Round(a, 8))
then you get the output you want.
Even this will not work for all cases. you need to handle those conditions separately.
ASKER CERTIFIED SOLUTION
membership
This solution is only available to members.
To access this solution, you must be a member of Experts Exchange.
ASKER
Thomasian:
I had independently tried that code earlier, but had abandonded it because it did not work for negative numbers.
Thanks for the fix.
It also needed a fix for the case when the input is zero.
See my modified code below.
I had independently tried that code earlier, but had abandonded it because it did not work for negative numbers.
Thanks for the fix.
It also needed a fix for the case when the input is zero.
See my modified code below.
'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"))
End If
End If
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"
Loop
End If
End If
End Function
Open in new window