djschick
asked on
Simple VB Question
I am not a VB expert and I am trying to make a simple function that will count the number of decimal places there is in a number. This is what I've done:
Public Function countDecimalPlaces(number As Double) As Integer
Do While number > Math.Round(number)
number = number * 10
countDecimalPlaces = countDecimalPlaces + 1
Loop
End Function
The problem is that it only works for up to 5 digits because in the comparison line for the loop (Do While number > Math.Round(number)), the Math.Round(number) part makes an integer, thus the the 5 digits the function will work until. I have tried a few other things for the right side of the inequation (ie: multiplying and dividing by powers of 10, using Int(number), etc.) but got the same results.
I can't seem to cast the right side of the inequation into a double properly.
Your help is much appreciated.
Public Function countDecimalPlaces(number As Double) As Integer
Do While number > Math.Round(number)
number = number * 10
countDecimalPlaces = countDecimalPlaces + 1
Loop
End Function
The problem is that it only works for up to 5 digits because in the comparison line for the loop (Do While number > Math.Round(number)), the Math.Round(number) part makes an integer, thus the the 5 digits the function will work until. I have tried a few other things for the right side of the inequation (ie: multiplying and dividing by powers of 10, using Int(number), etc.) but got the same results.
I can't seem to cast the right side of the inequation into a double properly.
Your help is much appreciated.
ASKER CERTIFIED SOLUTION
membership
This solution is only available to members.
To access this solution, you must be a member of Experts Exchange.
Public Function NumberOfCharInString(strSe archIn as string, strSerarchFor as string) as integer
dim intCnt as Integer, intSavePlace as Intger
intCnt=0
intSavePlace=1
Do while intSavePlace>0
intSavePlace= Instr(intsavePlace, strSeachIn, strSearchFor)
If intSacePlace>0 then
intCnt=intCnt+1
end if
loop
NumberOfCharInString=intCn t
end function
Then you can count what ever you want in a string
by calling NumberOfCharInString ("LOOK.FOR.DECIMALS",".")
dim intCnt as Integer, intSavePlace as Intger
intCnt=0
intSavePlace=1
Do while intSavePlace>0
intSavePlace= Instr(intsavePlace, strSeachIn, strSearchFor)
If intSacePlace>0 then
intCnt=intCnt+1
end if
loop
NumberOfCharInString=intCn
end function
Then you can count what ever you want in a string
by calling NumberOfCharInString ("LOOK.FOR.DECIMALS",".")
Private Sub Form_Load()
MsgBox CountDecimal(1.12345678)
End Sub
Private Function CountDecimal(ByVal Number As Double) As Integer
CountDecimal = Len(CStr(Number)) - Round(Number, 0) - 1
End Function
or...
Private Sub Form_Load()
MsgBox CountDecimal(1.123456789)
End Sub
Private Function CountDecimal(ByVal Number As Double) As Integer
Dim iPos As Integer
iPos = InStr(1, Number, ".")
If iPos > 0 Then
CountDecimal = Len(CStr(Number)) - iPos
Else
CountDecimal = 0
End If
End Function