Foros del Web » Programación para mayores de 30 ;) » .NET »

Función para Convertir numero a fracción

Estas en el tema de Función para Convertir numero a fracción en el foro de .NET en Foros del Web. Hola como estan fijense que transcribi una función hecha en vb.net para convertir números decimales en fracciones pero al momento de hacer la conversión en ...
  #1 (permalink)  
Antiguo 03/04/2009, 13:22
Avatar de cadesa  
Fecha de Ingreso: septiembre-2007
Ubicación: Guatemala
Mensajes: 130
Antigüedad: 16 años, 7 meses
Puntos: 0
Función para Convertir numero a fracción

Hola como estan fijense que transcribi una función hecha en vb.net para convertir números decimales en fracciones pero al momento de hacer la conversión en sql hay ciertas cosas que no se como hacerlas, por ejemplo:

1. Dentro de una función, esta se puede llamar a si misma.
2. Porque al tener un denominador muy grande sql me muestra un *.
3. Esta bien transcrita la función??.

El código transcrito en sql es este:

Código Sql:
Ver original
  1. CREATE FUNCTION dbo.CantidadFraccion (@numero AS NUMERIC(10,3))  
  2.  
  3. RETURNS VARCHAR(12) AS  
  4. BEGIN
  5.  
  6. DECLARE @fraccion AS VARCHAR(12)
  7. DECLARE @numerador INT
  8. DECLARE @denominador INT
  9. DECLARE @Entero INT
  10. DECLARE @Simplificar bit                        --linea 10
  11.  
  12. SET @Entero = FLOOR(@numero)
  13. SET @Numerador = (@numero - @Entero) * 100000
  14. SET @Denominador = 100000
  15.  
  16. IF ((@numero - @Entero) = 0)
  17.     SELECT @fraccion = CAST(@Entero AS VARCHAR(12))
  18. ELSE
  19. BEGIN
  20.     SET @Simplificar = 1            --linea 20
  21.     While @Simplificar = 1
  22.         BEGIN
  23.             IF (@numerador%2 = 0) AND (@denominador% 2 = 0)
  24.                 BEGIN
  25.                     SET @numerador =  @numerador /2
  26.                     SET @denominador = @denominador /2
  27.                 END
  28.             ELSE IF (@numerador%3 = 0) AND (@denominador%3 = 0)
  29.                 BEGIN
  30.                     SET @numerador =  @numerador / 3            --linea 30
  31.                     SET @denominador =  @denominador/ 3
  32.                 END
  33.             ELSE IF (@numerador%5 = 0) AND (@denominador%5 = 0)
  34.                 BEGIN
  35.                     SET @numerador =  @numerador/5
  36.                     SET @denominador = @denominador/5
  37.                 END
  38.             ELSE IF (@numerador%7 = 0) AND (@denominador%7 = 0)
  39.                 BEGIN
  40.                     SET @numerador = @numerador/7            --linea 40
  41.                     SET @denominador = @denominador/7
  42.                 END
  43.             ELSE IF (@numerador%13 = 0) AND (@denominador%13 = 0)
  44.                 BEGIN
  45.                     SET @numerador =  @numerador/13
  46.                     SET @denominador = @denominador/13
  47.                 END
  48.             ELSE
  49.                 SET @Simplificar = 0            
  50.         END                                        --linea 50
  51.         IF (@entero <> 0)
  52.             SELECT @fraccion =  CAST(@entero AS VARCHAR(3))
  53.                         + ' '+ CAST(@numerador AS VARCHAR(3))
  54.                         +'/'+ CAST(@denominador AS VARCHAR(3))
  55.         ELSE
  56.             SELECT @fraccion = (CAST(@numerador AS VARCHAR(3)) + '/'+ CAST(@denominador AS VARCHAR(3)))
  57.            
  58. END
  59. RETURN (@fraccion)
  60. END
En la parte donde esta la variable @fraccion ahi en vb esta la llamada a si misma de la función, y esto no se como hacerlo.

Aquí esta el código en vb

Código VB.Net:
Ver original
  1. Function ConvFraccion(ByVal Numero As Decimal) As String
  2.         Dim Numerador, Denominador, Entero As Integer
  3.         Dim Simplificar As Boolean
  4.         Entero = Decimal.Truncate(Numero)
  5.         Numerador = (Numero - Entero) * 100000
  6.         Denominador = 100000
  7.         If Numero - Entero = 0 Then
  8.             ConvFraccion = CStr(Entero)
  9.         Else
  10.             Simplificar = True
  11.             Do While Simplificar
  12.                 If Numerador Mod 2 = 0 And Denominador Mod 2 = 0 Then
  13.                     Numerador = Numerador / 2
  14.                     Denominador = Denominador / 2
  15.                 Else
  16.                     If Numerador Mod 3 = 0 And Denominador Mod 3 = 0 Then
  17.                         Numerador = Numerador / 3
  18.                         Denominador = Denominador / 3
  19.                     Else
  20.                         If Numerador Mod 5 = 0 And Denominador Mod 5 = 0 Then
  21.                             Numerador = Numerador / 5
  22.                             Denominador = Denominador / 5
  23.                         Else
  24.                             If Numerador Mod 7 = 0 And Denominador Mod 7 = 0 Then
  25.                                 Numerador = Numerador / 7
  26.                                 Denominador = Denominador / 7
  27.                             Else
  28.                                 If Numerador Mod 13 = 0 And Denominador Mod 13 = 0 Then
  29.                                     Numerador = Numerador / 13
  30.                                     Denominador = Denominador / 13
  31.                                 Else
  32.                                     Simplificar = False
  33.                                 End If
  34.                             End If
  35.                         End If
  36.                     End If
  37.                 End If
  38.             Loop
  39.             If Entero <> 0 Then
  40.                 ConvFraccion = CStr(Entero) + " " + CStr(Numerador) + "/" + CStr(Denominador)
  41.             Else
  42.                 ConvFraccion = CStr(Numerador) + "/" + CStr(Denominador)
  43.             End If
  44.         End If
  45.     End Function
Por favor ayudenme porque me servirá en mi trabajo, y ante todo gracias.

Saludos.
__________________
死は永遠の一歩だ

Última edición por cadesa; 03/04/2009 a las 13:38
  #2 (permalink)  
Antiguo 05/04/2009, 02:53
Avatar de cadesa  
Fecha de Ingreso: septiembre-2007
Ubicación: Guatemala
Mensajes: 130
Antigüedad: 16 años, 7 meses
Puntos: 0
Respuesta: Función para Convertir numero a fracción

Alguien por ahi que me pueda dar alguna ayuda, o de vdd esta muy dificil.
__________________
死は永遠の一歩だ
  #3 (permalink)  
Antiguo 05/04/2009, 11:33
Avatar de GatorV
$this->role('moderador');
 
Fecha de Ingreso: mayo-2006
Ubicación: /home/ams/
Mensajes: 38.567
Antigüedad: 18 años
Puntos: 2135
Respuesta: Función para Convertir numero a fracción

Tema trasladado desde SQL Server

http://www.forosdelweb.com/f21/funci...-datos-413499/
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 22:50.