• Status: Solved
  • Priority: Medium
  • Security: Public
  • Views: 1118
  • Last Modified:

Converting Fractions to Decimals

Using AC2002.

I am using the following code to convert fractions to decimals. However, it won't convert the number if it is a whole number only. Need help in modification.

Private Sub Command1_Click()
Dim x As Integer
Dim y As Integer
Dim z As String
Dim a1 As Integer
Dim a2 As Integer
Dim MyNumber As String

DoCmd.GoToControl "Text1"

x = InStr(1, Text1.Text, " ")
y = InStr(x, Text1.Text, "/")
z = Right$(Text1.Text, Len(Text1.Text) - x)
y = InStr(1, z, "/")
a1 = Val(Left$(z, y - 1))
a2 = Val(Right$(z, Len(z) - y))
MyNumber = Val(Left$(Text1.Text, x - 1)) + a1 / a2
Text1.Text = MyNumber
End Sub
0
CatDaddy2003
Asked:
CatDaddy2003
  • 3
  • 2
1 Solution
 
DexstarCommented:
@CatDaddy2003:

> I am using the following code to convert fractions to decimals. However, it
> won't convert the number if it is a whole number only. Need help in modification.

If it is a whole number only, then your value will be missing a "/".  So, check for y = 0, and if it is, then just use the whole value.
     
     Private Sub Command1_Click()
          Dim x As Integer
          Dim y As Integer
          Dim z As String
          Dim a1 As Integer
          Dim a2 As Integer
          Dim MyNumber As String

          DoCmd.GoToControl "Text1"

          x = InStr(1, Text1.Text, " ")
          y = InStr(x, Text1.Text, "/")
          If ( y > 0 ) Then
               z = Right$(Text1.Text, Len(Text1.Text) - x)
               y = InStr(1, z, "/")
               a1 = Val(Left$(z, y - 1))
               a2 = Val(Right$(z, Len(z) - y))
               MyNumber = Val(Left$(Text1.Text, x - 1)) + a1 / a2
          Else
               MyNumber = Val(Text1.Text)
          End IF

          Text1.Text = MyNumber
     End Sub

Hope That Helps,
Dex*
0
 
rthomsenCommented:
Try using the Eval function just to perform the division.  For Example:

Dim FractionString as string
Dim DecimalValue as Double

FractionString = "5/8"
DecimalValue = Eval(FractionString)



0
 
CatDaddy2003Author Commented:
I inserted your revised code, following are the results:

13 5/8 became 13.625 (works fine)

13 became a Runtime error '5', invalid procedure call and points to this line in the code:
 y = InStr(x, Text1.Text, "/")

and when I comment out that line, then the results become:

13 5/8 became 135

13 became 13
0
Get free NFR key for Veeam Availability Suite 9.5

Veeam is happy to provide a free NFR license (1 year, 2 sockets) to all certified IT Pros. The license allows for the non-production use of Veeam Availability Suite v9.5 in your home lab, without any feature limitations. It works for both VMware and Hyper-V environments

 
DexstarCommented:
After further refinement, including rthomsen's suggestion, here is what I came up with:

     Private Sub Command1_Click()
          Dim nPos As Integer
          Dim strValue as String
          Dim MyNumber As String
          Dim nValue As Double

          DoCmd.GoToControl "Text1"
          strValue = Text1.Text
          nPos = InStr( strValue, " " )
          If ( nPos > 0 ) Then
                    nValue = CLng(Left(strValue, nPos-1))
                    strValue = Mid(strValue, nPos+1)
          Else
                    nValue = 0
          End If
          nValue = nValue + Eval( strValue )
          MyNumber = CStr(nValue)
          Text1.Text = MyNumber
     End Sub

If that doesn't work for you, let me know what errors / problems you have.  Thanks.

Dex*
0
 
DexstarCommented:
The updated version should fix the issues that you just reported.  Try it out and let me know.

Dex*
0
 
CatDaddy2003Author Commented:
Worked just fine. Thanks!
0

Featured Post

Technology Partners: We Want Your Opinion!

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!

  • 3
  • 2
Tackle projects and never again get stuck behind a technical roadblock.
Join Now