New Page
I use this function to create fractions, it supports a "Precision" that defaults to 32 so you can use 16, 32, 64, etc... if you want.
You use it the same way as MV Fractions.
Examples:
With 32nd being default Fraction(45.89763) = 45-29/32
If i set the 2nd param to a 16th then Fraction((45.89763, 16) = 45-7/8
Public Function Fraction(ByVal DecimalNumber As Object, _
Optional ByVal Precision As Long = 32, _
Optional ShowDash As Boolean = True, _
Optional RoundDown As Boolean = False) As String
Dim GCD, TopNumber, Remainder, WholeNumber, Numerator, Denominator As Integer
If IsNumeric(DecimalNumber) Then
If RoundDown Then
DecimalNumber = Math.Floor(CDBL(DecimalNumber) * Precision) / Precision
Else
DecimalNumber = CDBL(DecimalNumber)
End If
WholeNumber = Fix(DecimalNumber)
Denominator = Precision
Numerator = Denominator * Math.Abs(DecimalNumber - WholeNumber)
If (Numerator <> Denominator) And (Numerator > 0) Then
GCD = Precision
TopNumber = Numerator
Do
Remainder = (GCD Mod TopNumber)
GCD = TopNumber
TopNumber = Remainder
Loop Until Remainder = 0
Numerator = Numerator \ GCD
Denominator = Denominator \ GCD
' Create and return the fraction
Fraction = If(DecimalNumber < 0 And WholeNumber = 0, "-", "") & _
If(WholeNumber <> 0, CStr(WholeNumber), "") & _
If(ShowDash And WholeNumber <> 0, "-", If(WholeNumber <> 0, " ", "")) & _
CStr(Numerator) & "/" & CStr(Denominator) & """"
Else
If Numerator = Precision Then WholeNumber += 1
Fraction = CStr(WholeNumber) & """"
End If
Else
Return ""
End If
End Function
No Comments