New product
Con este algoritmo de programación puedes convertir números decimales a fracciones. Desarrollado en VB.NET.
Este producto ya no está disponible
Disponible el:
Convertir números decimales a fracciones
Con este algoritmo de programación puedes convertir números decimales a fracciones. Desarrollado en VB.NET.
Destinatario :
* Campos requeridos
o Cancelar
Hoy en el blog para completar un poco con el trabajo de los números racionales, les traigo una función que hace el trabajo contrario. Convierte un número con decimales a fracción de forma interesante, así que, sin más, les muestro.
DarListaFracciones entrega una lista de fracciones aproximadas al número con decimales dado por el argumento d.
Como la programe como parte para la estructura de NumerosRacionales, como se puede ver en la sección:
ListaFracciones.Add(NewNumeroRacional(numeradores(i), denominadores(i)))
Crea un numero racional. Si quieren usarla en sus proyectos, solo deben sustituir por bien sea una cadena de texto o su propia estructura de la siguiente forma:
ListaFracciones.Add(numeradores(i) & “/” & denominadores(i)))
En este caso se creará una cadena de texto con numerador y denominador “N/D”
La función se muestra a continuación:
Shared Function DarListaFracciones(d As Double) As List(Of NumeroRacional)
Dim numeradores() As Integer = {0, 1}
Dim denominadores() As Integer = {1, 0}
Dim ListaFracciones As New List(Of NumeroRacional)
Dim maxNumerador As Long = DarMaximoNumerador(d)
Dim d2 As Double = d
Dim calcD As Double = Double.NaN
Dim prevCalcD As Double = Double.NaN
'"for" para evitar el bloqueo por bucle infinito
For i = 2 To 999
ReDim Preserve numeradores(numeradores.Length + 1)
ReDim Preserve denominadores(denominadores.Length + 1)
Dim L2 As Double = Math.Floor(d2)
numeradores(i) = L2 * numeradores(i - 1) + numeradores(i - 2)
If (Math.Abs(numeradores(i)) > maxNumerador) Then Exit For
denominadores(i) = L2 * denominadores(i - 1) + denominadores(i - 2)
calcD = numeradores(i) / denominadores(i)
If (calcD = prevCalcD) Then Exit For
ListaFracciones.Add(New NumeroRacional(numeradores(i), denominadores(i)))
If (calcD = d) Then Exit For
prevCalcD = calcD
d2 = 1 / (d2 - L2)
Next
Return ListaFracciones
End Function
Con esta función lo que se hace es eliminar la coma del número y junta todo como un bloque para que sea el máximo numerador posible para hacer la división iterativa.
Shared Function DarMaximoNumerador(f As Double) As Long
Dim digitos As Long = 0
Dim DecimalSeparator As String = My.Application.Culture.NumberFormat.NumberDecimalSeparator
Dim ix As Integer = f.ToString().IndexOf(DecimalSeparator)
If ix <> -1 Then digitos = CLng(f.ToString().Remove(ix, 1))
Return digitos
End Function
Es todo por los momentos, pronto sacaré la aplicación para que puedan ver los programas funcionando.
NOTA: No olvides seguirnos en nuestras redes sociales de facebook y twitter para que formes parte de nuestra comunidad y recibas la notificacion cada vez que publiquemos algo nuevo, asi no te perderas de nada.
Escrito por:
11/05/2018
Elimar García
Eli Programa
Lo que estaba esperando
Esta funcion es la que estaba esperando. Muchas gracias.
No se requiere registro
Si luego de leer nuestro articulo aun tiene dudas, puede hacer su pregunta utilizando el siguiente formulario.
Si el enlace de descarga redirige a otro producto que no es el descrito en el artículo o está roto, reportarlo usando nuestro