ayuda como pasar numeros con decimales a fraccion

Iniciado por andrer03, 21 Marzo 2009, 19:06 PM

0 Miembros y 1 Visitante están viendo este tema.

andrer03

hola compis algui sabe como pasar numeros con decimales a fraccion
poe ejemplo

este numero 1,3862727272727272727272727272727
es igual a esta fraccion 731952/528000
quiero expresar el numero en fracion y cuando al dividir la fracion el numero sea el mismo espero q me entiendan gracias  :-*

‭‭‭‭jackl007

mira primero tienes que convertir el numero a una cadena y determinar la cantidad de cifras decimales; para luego multiplicar el numero por dicha cantidad de cifras decimales; entonces obtendrias el mismo numero multiplicado por un 1 * #cifras decimales (llamaremos "N" a este numero; ahora tienes que tener otra variable para almacenar dicha cantidad; es obvio que si divides el numerador (el numero multiplicado por  N; llamamos...) entre el numero N (ya que dara el mismo numero, pues es lo correcto).
Ahora lo que te falta es tener una funcion que simplifique; esto lo consiges obteniendo el maximo comun divisor entre dichos numeros y dividiendolos las veces que sea necesarias hasta que no tengan mas divisores comunes... entonces tendras el numero en fraccion simplificado...

Recuerdo que pense en esta forma para hacer una calculadora que sume fraciones en JAVA (es mas facil si conoces los conceptos de objetos y clases, pues ....)

Saludos; si tienes dudas posteas (no te lo puse re-contra explicado, para que te des el trabajo de poder hacerlo... y no dartelo todo facil...)


andrer03

no entiendo nah. :( pero lo estoy pensando ^^ si puedes indicame un poco mas
gracias por tu repuesta

seba123neo

La característica extraordinaria de las leyes de la física es que se aplican en todos lados, sea que tú elijas o no creer en ellas. Lo bueno de las ciencias es que siempre tienen la verdad, quieras creerla o no.

Neil deGrasse Tyson

‭‭‭‭jackl007

Bueno, te pongo el codigo aqui (lo acabo de hacer); la explicacion del algoritmo usada esta arriba, falta mejorar, ya haslo tu...:

Código (vb) [Seleccionar]

Private Sub Form_Load()
Dim Numero As Double
Dim Fraccion As String

Numero = 123.135
Fraccion = cFraccion(Numero) 'Obtiene la fraccion sin simplificar
MsgBox "La fracion de " & Numero & " es " & Simplificar(Fraccion) 'Simplifica la Fracion

End


End Sub

Function cFraccion(Rac As Double) 'Rac: Racional
    Dim sRac As String 'la cadena que contiene a Rac
    Dim Num As Long 'Numerador
    Dim Den As Long 'Denominador
    Dim nDec As Integer
    sRac = Str(Rac) 'Convierte en cadena
    nDec = 0 'cifras decinamales a cero por defecto
   
    If InStr(1, sRac, ".") <> 0 Then 'Observa si tiene el punto decimal
    nDec = Len(Mid(sRac, InStr(1, sRac, ".") + 1)) 'Cuenta el Numero de Decimales
    End If


    Num = Rac * Potencia(10, nDec)
    Den = Potencia(10, nDec)
   
    cFraccion = Num & "/" & Den
   

End Function
Function Simplificar(ByVal Fraccion As String)

Dim Aux, A, B As Long
Dim Den, Num As Long
Dim MCD As Integer

'Recorta y obtiene el Numerador y Denominador
Num = Val(Mid(Fraccion, 1, InStr(1, Fraccion, "/") - 1))
Den = Val(Mid(Fraccion, InStr(1, Fraccion, "/") + 1))
A = Num
B = Den
If Num = 0 Or Den = 0 Then Simplificar = "0": Exit Function

'#############   Busca el Maximo Comun Divisor - Algoritmo de euclides para hacerlo...
    While (B <> 0)
        Aux = A Mod B
        A = B
        B = Aux
    Wend
'############

MCD = A 'Asigna el Valor del Maximo C. D
Simplificar = Num / MCD & "/" & Den / MCD  'Divide el Num y Den por el MCD, y lo convierte en cadena


End Function

Function Potencia(ByVal n As Integer, ByVal A As Integer)
'haya la potencia de un numero: "n" elevado a la "a"
Potencia = n
    For i = 1 To A - 1
        Potencia = Potencia * n
    Next i
   
End Function


Lo que hace es por ejemplo: 123.135
saca el Numerador: 123135 y Denominador: 1000
ahora ese resultado lo simplifica y lo muestra...


alguna duda?

andrer03