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 originalCREATE FUNCTION dbo.CantidadFraccion (@numero AS NUMERIC(10,3))
RETURNS VARCHAR(12) AS
BEGIN
DECLARE @fraccion AS VARCHAR(12)
DECLARE @numerador INT
DECLARE @denominador INT
DECLARE @Entero INT
DECLARE @Simplificar bit --linea 10
SET @Entero = FLOOR(@numero)
SET @Numerador = (@numero - @Entero) * 100000
SET @Denominador = 100000
IF ((@numero - @Entero) = 0)
SELECT @fraccion = CAST(@Entero AS VARCHAR(12))
ELSE
BEGIN
SET @Simplificar = 1 --linea 20
While @Simplificar = 1
BEGIN
IF (@numerador%2 = 0) AND (@denominador% 2 = 0)
BEGIN
SET @numerador = @numerador /2
SET @denominador = @denominador /2
END
ELSE IF (@numerador%3 = 0) AND (@denominador%3 = 0)
BEGIN
SET @numerador = @numerador / 3 --linea 30
SET @denominador = @denominador/ 3
END
ELSE IF (@numerador%5 = 0) AND (@denominador%5 = 0)
BEGIN
SET @numerador = @numerador/5
SET @denominador = @denominador/5
END
ELSE IF (@numerador%7 = 0) AND (@denominador%7 = 0)
BEGIN
SET @numerador = @numerador/7 --linea 40
SET @denominador = @denominador/7
END
ELSE IF (@numerador%13 = 0) AND (@denominador%13 = 0)
BEGIN
SET @numerador = @numerador/13
SET @denominador = @denominador/13
END
ELSE
SET @Simplificar = 0
END --linea 50
IF (@entero <> 0)
SELECT @fraccion = CAST(@entero AS VARCHAR(3))
+ ' '+ CAST(@numerador AS VARCHAR(3))
+'/'+ CAST(@denominador AS VARCHAR(3))
ELSE
SELECT @fraccion = (CAST(@numerador AS VARCHAR(3)) + '/'+ CAST(@denominador AS VARCHAR(3)))
END
RETURN (@fraccion)
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 originalFunction ConvFraccion(ByVal Numero As Decimal) As String
Dim Numerador, Denominador, Entero As Integer
Dim Simplificar As Boolean
Entero = Decimal.Truncate(Numero)
Numerador = (Numero - Entero) * 100000
Denominador = 100000
If Numero - Entero = 0 Then
ConvFraccion = CStr(Entero)
Else
Simplificar = True
Do While Simplificar
If Numerador Mod 2 = 0 And Denominador Mod 2 = 0 Then
Numerador = Numerador / 2
Denominador = Denominador / 2
Else
If Numerador Mod 3 = 0 And Denominador Mod 3 = 0 Then
Numerador = Numerador / 3
Denominador = Denominador / 3
Else
If Numerador Mod 5 = 0 And Denominador Mod 5 = 0 Then
Numerador = Numerador / 5
Denominador = Denominador / 5
Else
If Numerador Mod 7 = 0 And Denominador Mod 7 = 0 Then
Numerador = Numerador / 7
Denominador = Denominador / 7
Else
If Numerador Mod 13 = 0 And Denominador Mod 13 = 0 Then
Numerador = Numerador / 13
Denominador = Denominador / 13
Else
Simplificar = False
End If
End If
End If
End If
End If
Loop
If Entero <> 0 Then
ConvFraccion = CStr(Entero) + " " + CStr(Numerador) + "/" + CStr(Denominador)
Else
ConvFraccion = CStr(Numerador) + "/" + CStr(Denominador)
End If
End If
End Function
Por favor ayudenme porque me servirá en mi trabajo, y ante todo gracias.
Saludos.