Select from freelancers specializing in everything from database administration to programming, who have proven themselves as experts in their field. Hire the best, collaborate easily, pay securely and get projects done right.

Solved

Posted on 2003-10-29

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.

3 Comments

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

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

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",".")

Question has a verified solution.

If you are experiencing a similar issue, please ask a related question

Title | # Comments | Views | Activity |
---|---|---|---|

Change the path of the data source in my Excel pivot table with macro | 4 | 43 | |

How does CurrentUser work? | 10 | 37 | |

how to know if my Checkbox is True in VB6.0? | 9 | 54 | |

How to read File Date Created using VB6 | 8 | 38 |

Join the community of 500,000 technology professionals and ask your questions.