Visual Basic Code of the Week (COTW)
http://www.codeoftheweek.com
Issue #19
All content and source code is Copyright (c) 1997-98 by C&D Programming Corp. None of the source can be reprinted in any manner without express written permission of C&D Programming Corp.

Requirements for this Issue

The source code in this issue is designed for all versions of Visual Basic.

In this Issue

This issue shows how to convert a fractional value into a decimal value. The function will take number that contains a fraction, such as 40 1/4 and convert it to 40.25. This is useful in any application where the input might involve fractions, such as building material measurements, stocks, and math tests (of course there are many more applications).

FractionValue

Public Function FractionValue(ByVal sFraction As String) As Double

Parameters

Return Value

None unless an error occurs. If an error occurs it will be raised to the caller.

Sample Usage

The below example uses the FractionValue to convert several numbers into the decimal equivalents.

       Dim dNumber1 as Double
       Dim dNumber2 as Double

       dNumber1 = FractionValue("40 1/4")
       dNumber2 = Fractionvalue("1 1/2")

dNumber1 will be equal to 40.25 and dNumber2 will be equal to 1.5.

Source Code

Just paste this code into any module (this is the desired way) or form. To do this, open up your project and insert a new Module. Change the name of the module to basMath and paste this code into the module.

'----------------------------------------------------------------------
'
'   Module Name:    basMath
'   Written By:     C&D Programming Corp.
'   Create Date:    1/5/98
'   Copyright:      Copyright 1997-98 by C&D Programming Corp.  Source
'                   code may not be reproduced except for use in a
'                   compiled executable.  All rights reserved.  If
'                   you would like to reprint any or all of this
'                   code please email us at info@codeoftheweek.com
'
'   Purpose:        Determine the decimal equivalent of a fraction
'                   or whole number.
'
'
'   Example Calls:
'       dValue = FractionValue("1 1/2")
'       dValue = FractionValue("6 7/16")
'
'----------------------------------------------------------------------
Function FractionValue(ByVal sFraction As String) As Double
    Dim iSpace As Integer
    Dim iSlash As Integer
    Dim sFractPart As String
    Dim dFractValue As Double
    Dim sWholePart As String

    On Error Goto Handler

    ' Just in case a Null String is passed here, we use the
    ' concatenation trick.
    If "" & sFraction = "" Then
        FractionValue = 0
        Exit Function
    End If

    ' Find the location of the space that separates the
    ' whole number from the fraction.
    iSpace = InStr(sFraction, " ")

    ' Find the slash in the fraction.
    iSlash = InStr(sFraction, "/")

    ' If we have a fractional part, start the process to
    ' figure out the decimal equivalent of the fraction.
    If iSlash > 0 Then

        ' Separate the string into the whole number
        ' portion and the fractional portion.
        If iSpace = 0 Then
            sFractPart = sFraction
            sWholePart = "0"
        Else
            sFractPart = Mid$(sFraction, iSpace + 1)
            sWholePart = Left(sFraction, iSpace - 1)
        End If

        ' Do the calculations to convert the mixed number
        ' into a decimal number.
        iSlash = InStr(sFractPart, "/")
        If iSlash = 0 Then
            dFractValue = CDbl(Left(sFraction, iSpace - 1))
        Else
            dFractValue = Left$(sFractPart, iSlash - 1) / Mid$(sFractPart, iSlash + 1)
            dFractValue = dFractValue + CDbl(sWholePart)
        End If
    Else
        ' There is no fraction, so just take the value of this number.
        dFractValue = Val(sFraction)
    End If
    FractionValue = dFractValue

Handler:
    Err.Raise Err.Number, "FractionValue", Err.Description
End Function

This document is available on the web

Paid subscribers can view this issue in HTML format. There is no additional source or information in the HTML formatted document. It just looks a little better. Just point your browser to http://www.codeoftheweek.com/membersonly/bi/0019.html

Summary

That concludes this issue of COTW. We hope you find the source code useful in your development.

The below describes the ways you can supply us some feedback about COTW. We would like to see our members help mold COTW into the best Visual Basic source code resource available. But to do that we need your feedback about what you like and what you do not like about COTW.

Future Issues

We are currently planning for the next several issues of Code of the Week. If you have any suggestions of source code that you would like to see covered, please jump

How to tell us what you think

If you have any suggestions for topics you would like to see covered or questions about this issue, please email them to info@codeoftheweek.com or use online feedback form at http://www.codeoftheweek.com/feedback.html.

If you have any source code you would like to submit for possible inclusion in COTW, please fill out our online submission form at http://www.codeoftheweek.com/submission.html.

Contact Information

C&D Programming Corp.
PO Box 20128
Floral Park, NY 11002-0128
Phone or Fax: (212) 504-7945
Email: info@codeoftheweek.com
Web: http://www.codeoftheweek.com

Subscription Update

Thank you for trying Code of the Week for Visual Basic.

Your free trial expires after you receive your fourth issue. If you want to continue to receive Code of the Week you can get 52 issues of COTW for only $19.95. This is a full year of Visual Basic source code and information to help with all your development. So don't wait, subscribe now! The quickest way to subscribe is to jump to our online order form at http://www.codeoftheweek.com/order.html