>Hello,
>
>Does somebody know how to calculate a fraction from a decimal?
>
>I have the user input 0.75 and the program should generate "3/4".
>
>I would highly appreciate your help.
I have assembled some pieces I had lying around
function do_it()
local numerator, denominator
?NumToFraction(-.855, @m.numerator, @m.denominator), m.numerator, m.denominator
endfunc
function NumToFraction(n, numerator, denominator)
local fraction
if( m.n == 0 )
fraction = '0'
numerator = 0
denominator = 1
else
denominator = int(LowestCommonMultiple(m.n, 1) / abs(m.n))
numerator = int(m.n * m.denominator )
fraction = transf(m.numerator) + '/' + transf(m.denominator)
endif
return m.fraction
endfunc
function GreatestCommonDivisor(x, y)
if( ( m.x == 0) or ( m.y == 0 ) )
return 0
endif
x = abs(m.x)
y = abs(m.y)
do while ( true )
x = mod(m.x, m.y)
if( m.x == 0 )
return m.y
endif
y = mod(m.y, m.x)
if( m.y == 0 )
return m.x
endif
enddo
endfunc
function LowestCommonMultiple(x, y)
local gcd
gcd = GreatestCommonDivisor(m.x, m.y)
if( m.gcd == 0 )
error 1307
endif
return abs( int((m.x * m.y) / m.gcd ) )
endfunc
Gregory