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:
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.Ver original
CREATE 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
Aquí esta el código en vb
Código VB.Net:
Por favor ayudenme porque me servirá en mi trabajo, y ante todo gracias.Ver original
Function 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
Saludos.