Converting a fraction to decimal

G

George R

I would like to use an unbound control on an unbound form to specify
parameters for a query. I would like the user to enter inches and then
fractional inches and then have another text box show the total of those two
entries in decimal form. How can I convert an entry such as 1/8 inches to
0.125 inches?
Or, if possible, have the user enter inches and fractions in the same box
and convert to decimal, eg: 4 1/2 to 4.500.
Thank you for your consideration.
 
K

Klatuu

Let's say we have a text box named txtFraction to put the enter number and
fraction in and we want it to show in decimal format in a control named
txtDecimal

'Set up a variable the Split function can use. So we can separate the
number and bothi sides of the fraction into an array:

strNumber = Replace(Trim(Me.txtFraction), " ", "/")

'Create the array:

aryAllParts = Split(strNumber, "/")

'Element 0 is the whole number
'Element 1 is left side of the fraction
'Element 2 is the right side of the fraction

'Do the math and put it in the txtDecimal Control

Me.txtDecimal = cstr(aryAllParts(0)) & format(aryAllParts(1) /
aryAllParts(2), "#.0000")

You can change the formatting to suit yourself, but the leading # in format
string is to surpress the 0 that is alway on the front of a number less than
1.

If I were doing this, I would write a function that would return the
formatted string and call it from txtDecimal's control source
 
F

fredg

I would like to use an unbound control on an unbound form to specify
parameters for a query. I would like the user to enter inches and then
fractional inches and then have another text box show the total of those two
entries in decimal form. How can I convert an entry such as 1/8 inches to
0.125 inches?
Or, if possible, have the user enter inches and fractions in the same box
and convert to decimal, eg: 4 1/2 to 4.500.
Thank you for your consideration.

You can convert the Text value of 4 1/2 using the following function.
Place it in a Module.

Function ConvertFraction(strGetNumber As String) As Double
' Will convert a fraction, such as 12 3/4 to
' it's decimal equivalent, 12.75
Dim dblFraction As Double
Dim intPosition As Integer
Dim strTop As String
Dim strBottom As String
Dim dblWhole As Double
Dim strFraction As String
On Error GoTo Err_Convert
intPosition = InStr(strGetNumber, "/")
If intPosition = 0 Then
ConvertFraction = strGetNumber ' Not a whole number
Exit Function
End If

intPosition = InStr(strGetNumber, " ")
If intPosition > 0 Then
dblWhole = Val(Left(strGetNumber, intPosition - 1))
Else
dblWhole = 0
End If
strFraction = Mid(strGetNumber, intPosition + 1)
intPosition = InStr(strFraction, "/")
strTop = Left(strFraction, intPosition - 1)
strBottom = Mid(strFraction, intPosition + 1)
dblFraction = Val(strTop) / Val(strBottom)
ConvertFraction = dblWhole + dblFraction

Exit_Function:
Exit Function

Err_Convert:
MsgBox "Error #: " & Err.Number & " " & Err.Description,
vbInformation
Resume Exit_Function
End Function

You can call the above function from a query.

DecValue:ConvertFraction([YourFieldName])
 
G

George R

Thanks Dave,
I wrote the following function and it hung up on the Line: aryAllParts =
Split(strNumber, "/") with the message "Cannot assign to array."

Public Function FractionToDecimal(txtFraction As String) As Single
'Set up a variable the Split function can use. So we can separate the
'number and both sides of the fraction into an array:

Dim strNumber As String
Dim aryAllParts(2) As String
strNumber = Replace(Trim(txtFraction), " ", "/")
'Create the array:

aryAllParts = Split(strNumber, "/")

'Element 0 is the whole number
'Element 1 is left side of the fraction
'Element 2 is the right side of the fraction

'Do the math and put it to the function value
FractionToDecimal = CSng(CStr(aryAllParts(0)) & Format(aryAllParts(1) /
aryAllParts(2), "#.0000"))

End Function
I would appreciate your comments on how to fix this even though Fred G has
given me another function.
Thaks,
George R.
 
G

George R

Thanks Fred,
Your function works fine (after adding an error line).
George

fredg said:
I would like to use an unbound control on an unbound form to specify
parameters for a query. I would like the user to enter inches and then
fractional inches and then have another text box show the total of those two
entries in decimal form. How can I convert an entry such as 1/8 inches to
0.125 inches?
Or, if possible, have the user enter inches and fractions in the same box
and convert to decimal, eg: 4 1/2 to 4.500.
Thank you for your consideration.

You can convert the Text value of 4 1/2 using the following function.
Place it in a Module.

Function ConvertFraction(strGetNumber As String) As Double
' Will convert a fraction, such as 12 3/4 to
' it's decimal equivalent, 12.75
Dim dblFraction As Double
Dim intPosition As Integer
Dim strTop As String
Dim strBottom As String
Dim dblWhole As Double
Dim strFraction As String
On Error GoTo Err_Convert
intPosition = InStr(strGetNumber, "/")
If intPosition = 0 Then
ConvertFraction = strGetNumber ' Not a whole number
Exit Function
End If

intPosition = InStr(strGetNumber, " ")
If intPosition > 0 Then
dblWhole = Val(Left(strGetNumber, intPosition - 1))
Else
dblWhole = 0
End If
strFraction = Mid(strGetNumber, intPosition + 1)
intPosition = InStr(strFraction, "/")
strTop = Left(strFraction, intPosition - 1)
strBottom = Mid(strFraction, intPosition + 1)
dblFraction = Val(strTop) / Val(strBottom)
ConvertFraction = dblWhole + dblFraction

Exit_Function:
Exit Function

Err_Convert:
MsgBox "Error #: " & Err.Number & " " & Err.Description,
vbInformation
Resume Exit_Function
End Function

You can call the above function from a query.

DecValue:ConvertFraction([YourFieldName])
 

Ask a Question

Want to reply to this thread or ask your own question?

You'll need to choose a username for the site, which only take a couple of moments. After that, you can post your question and our members will help you out.

Ask a Question

Top