Tek-Tips is the largest IT community on the Internet today!

Members share and learn making Tek-Tips Forums the best source of peer-reviewed technical information on the Internet!

  • Congratulations Mike Lewis on being selected by the Tek-Tips community for having the most helpful posts in the forums last week. Way to Go!

display decimal as a fraction 1

Status
Not open for further replies.

lysys

Programmer
Oct 1, 2008
1
0
0
TT
how can i display 12.5 (a calculated value, long int) as 12 1/2 in an access report
 
are you only looking to do simple fractions (1/2, 1/4, 1/10, 1/100) or need something a little more detailed?

"If I were to wake up with my head sewn to the carpet, I wouldn't be more surprised than I am right now.
 
Ask in one of the specialist Access forums on this site. Use the 'find a forum' search at the top of this page.

___________________________________________________________
If you want the best response to a question, please check out FAQ222-2244 first.
'If we're supposed to work in Hex, why have we only got A fingers?'
Drive a Steam Roller
Steam Engine Prints
 
I pulled this off the web and then wrapped my function around it because the function returns improper fractions.
Code:
Function dec2frac(dblDecimal As Double) As String
'
'   Excel function to convert decimal values to integer fractions.
'
'   Written by:     Erik Oosterwal
'   Started on:     November 16, 2006
'   Completed on:   November 16, 2006
'

    Dim intNumerator, intDenominator, intNegative As Long   ' Declare integer variables as long
                                                            '   integers.
    Dim dblFraction, dblAccuracy As Double                  ' Declare floating point variables
                                                            '   as double precision.
    Dim txtDecimal As String                                ' need a string representation of the input value
    Dim i As Integer                                                       ' in order to determine the required accuracy.
        
' Find the accuracy needed for the output by checking the number of digits behind the decimal point
'   of the input value.
'
'    dblAccuracy = 1 / 10 ^ (Len(CStr(dblDecimal - Fix(dblDecimal))) - 2)
'
'   While the formula above should work, there is a serious error in the way Excel handles
'   decimal numbers and there's a huge rounding error issue.  Subtracting the int() of
'   12.1 from 12.1 produces 0.0999999999 or something similar.  Obviously that won't
'   work for our desired accuracy of the magnitude of the fractional part of the number
'   so a slower more cumbersome method has to be used...
    
    dblAccuracy = 0.1                                       ' Set the initial Accuracy level.
    txtDecimal = CStr(dblDecimal)                           ' Get a  string representation of the input number.
    
    For i = 1 To Len(txtDecimal)                                ' Check each character to see if it's a decimal point...
        If Mid$(txtDecimal, i, 1) = "." Then                    ' if it is then we get the number of digits behind the decimal
            dblAccuracy = 1 / 10 ^ (Len(txtDecimal) - i + 1)    '   assign the new accuracy level, and
            Exit For                                            '   exit the for loop.
        End If
    Next
    
    intNumerator = 0                                ' Set the initial numerator value to 0.
    intDenominator = 1                              ' Set the initial denominator value to 1.
    intNegative = 1                                 ' Set the negative value flag to positive.
    
    If dblDecimal < 0 Then intNegative = -1         ' If the desired decimal value is negative,
                                                    '   then set the negative value flag to
                                                    '   negative.
    
    dblFraction = 0                                 ' Set the fraction value to be 0/1.
        
    While Abs(dblFraction - dblDecimal) > dblAccuracy   ' As long as we're still outside the
                                                        '   desired accuracy, then...
        If Abs(dblFraction) > Abs(dblDecimal) Then      ' If our fraction is too big,
            intDenominator = intDenominator + 1         '   increase the denominator
        Else                                            ' Otherwise
            intNumerator = intNumerator + intNegative   '   increase the numerator.
        End If
        
        dblFraction = intNumerator / intDenominator     ' Set the new value of the fraction.
        
    Wend
    
    dec2frac = LTrim(Str(intNumerator)) & "/" & LTrim(Str(intDenominator)) ' Display the numerator and denominator
    
End Function




Public Function properDec2Frac(dblVal As Double) As String
  Dim intPart As Long
  Dim decPart As Double
  intPart = Fix(dblVal)
  decPart = dblVal - intPart
  If intPart = 0 And decPart = 0 Then
    properDec2Frac = "0"
  ElseIf intPart = 0 Then
    properDec2Frac = dec2frac(decPart)
  Else
    properDec2Frac = intPart & " " & dec2frac(Abs(decPart))
  End If
End Function
call properDec2Frac. I tested with

-12.5
-.5
0
.5
12.5
 
Status
Not open for further replies.

Part and Inventory Search

Sponsor

Back
Top