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.

I came up with the top method after realizing Ken basically did the bottom one. Darn skimming. :P

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

0

clanglCommented:

Public Function NumberOfCharInString(strSearchIn 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=intCnt
end function

Then you can count what ever you want in a string
by calling NumberOfCharInString ("LOOK.FOR.DECIMALS",".")

0

Featured Post

We value your feedback.

Take our survey and automatically be enter to win anyone of the following:
Yeti Cooler, Amazon eGift Card, and Movie eGift Card!

Why not something like this:

Public Function countDecimalPlaces(number as Double) As Integer

Dim sNum As String

dim x As Integer

sNum = Cstr(number)

x = Instr(sNum,".")

If x > 0 then x = Len(sNum) - x

countDecimalPlaces = x

Exit Function

Ken