se me presento un caso en una pequeña fabrica en la que se necesitaba
expresar los resultados de algunos cálculos en formato de fracción, pero
como sabemos gambas no escribe en facción y creo que ningún otro lenguaje,
así que escribí una función que permite introducir EJ: 0.8125 y devuelve 13/16
adjunto la función. espero a alguien le sea de utilidad
PUBLIC FUNCTION Cfraccion(Cadena AS String) AS String 'Convierte decimal a fraccion
DIM tm AS Byte 'tamaño del decimal
DIM m AS Single 'maximo comun divisor
DIM k AS Single 'multiplicador
DIM n AS Single 'numerador
DIM d AS Single 'denominador
DIM n1 AS Single 'numerador experimental
DIM d1 AS Single 'denominador experimental
DIM f AS String
DIM final AS String
f = Frac(Cadena)
tm = Len(f) - 2
IF tm = 1 THEN k = 10
IF tm = 2 THEN k = 100
IF tm = 3 THEN k = 1000
IF tm = 4 THEN k = 10000
n = k * Frac(Cadena)
d = k * 1
FOR m = k TO 1 STEP -1
n1 = n / m
d1 = d / m
IF Len(CStr(Frac(n1))) <= 1 AND Len(CStr(Frac(d1))) <= 1 THEN
m = 1
final = n1 & "/" & d1
ENDIF
NEXT
RETURN final
END
DIM tm AS Byte 'tamaño del decimal
DIM m AS Single 'maximo comun divisor
DIM k AS Single 'multiplicador
DIM n AS Single 'numerador
DIM d AS Single 'denominador
DIM n1 AS Single 'numerador experimental
DIM d1 AS Single 'denominador experimental
DIM f AS String
DIM final AS String
f = Frac(Cadena)
tm = Len(f) - 2
IF tm = 1 THEN k = 10
IF tm = 2 THEN k = 100
IF tm = 3 THEN k = 1000
IF tm = 4 THEN k = 10000
n = k * Frac(Cadena)
d = k * 1
FOR m = k TO 1 STEP -1
n1 = n / m
d1 = d / m
IF Len(CStr(Frac(n1))) <= 1 AND Len(CStr(Frac(d1))) <= 1 THEN
m = 1
final = n1 & "/" & d1
ENDIF
NEXT
RETURN final
END