Redondeo de números

29/11/2003 - 16:32 por Alfonso Garcia | Informe spam
Hola Grupo
Necesito saber cómo se hace en SQL ele redondedo de números de 5 en 5
centésimas. Lo expresaré con un ejemplo: si tengo la medida 1.32 cm quiero
facturar 1,35. Si la medida es 1.36 facturo 1.40.
Un saludo

Alfonso J

Preguntas similare

Leer las respuestas

#6 ulises
30/11/2003 - 01:10 | Informe spam
Muy elegante :) ...

Saludos,
Ulises

On Sat, 29 Nov 2003 17:19:01 -0600, "Javier Loria"
wrote:

Hola:
No me di cuenta que el requerimiento era rendodear hacia arriba :(
El codigo de Ulises queda un poco mejor asi:
ALTER FUNCTION dbo.fn_obtienevalor
( @numero decimal(15,2) )
RETURNS decimal (15,2)
AS
BEGIN
RETURN FLOOR((@Numero+.0499999)*20)/20
END

Saludos,


Javier Loria
Costa Rica
Respuesta Responder a este mensaje
#7 Alfonso Garcia
01/12/2003 - 17:34 | Informe spam
Gracias a todos por la ayuda ,
Cuando el segundo decimal es 0 o 5 y el tercer decimal es menor que 5 no
suma a la siguiente tabla.
Por ejemplo 1.203 nos sale 1.20 en vez de 1.25.

Alfonso J

"Javier Loria" escribió en el mensaje
news:#
Hola:
No me di cuenta que el requerimiento era rendodear hacia arriba :(
El codigo de Ulises queda un poco mejor asi:
ALTER FUNCTION dbo.fn_obtienevalor
( @numero decimal(15,2) )
RETURNS decimal (15,2)
AS
BEGIN
RETURN FLOOR((@Numero+.0499999)*20)/20
END

Saludos,


Javier Loria
Costa Rica
Se aprecia la inclusion de DDL (CREATE, INSERTS, etc.)
que pueda ser copiado y pegado al Query Analizer.
La version de SQL y Service Pack tambien ayuda.
ulises escribio:
> Con el permiso de Javier, le haría una pequeña suma para
> obtener lo deseado por Alfonso; si lo manejamos en una
> función :
>
> CREATE FUNCTION dbo.fn_obtienevalor
> ( @numero decimal(15,2) )
> RETURNS decimal (15,2)
> AS
> BEGIN
> DECLARE @valor as decimal(15,2)
> SELECT @valor = ROUND(@numero*20,0)/20
> IF @valor < @numero SET @valor = @valor + 0.05 ELSE SET
> @valor = @numero
> RETURN (@valor)
> END
>
> si ejecutamos :
>
> SELECT dbo.fn_obtienevalor(1.32)
> SELECT dbo.fn_obtienevalor(1.35)
> SELECT dbo.fn_obtienevalor(1.36)
> SELECT dbo.fn_obtienevalor(1.40)
>
> obtendremos 1.35, 1.35, 1.40 y 1.40 respectivamente.
>
> Saludos,
> Ulises
>
>> Hola Alfonso:
>> Si quires redondear en bloques de 5, debes usar la funcion que
>> explica Gustavo con un truco que es multiplicar por 20 y dividir por
>> 20. SELECT ROUND(123.46*20,0)/20
>> El multiplicar por 20, redondera y luego dividir por 20 te debe
>> brindar el resultado deseado. .
>> Saludos,
>>
>> Javier Loria
>> Costa Rica
>> Se aprecia la inclusion de DDL (CREATE, INSERTS, etc.)
>> que pueda ser copiado y pegado al Query Analizer.
>> La version de SQL y Service Pack tambien ayuda.
>> Gustavo Larriera [MVP]
> escribio:
>>> Puedes probar con ROUND, algunos ejemplos del Books Online:
>>>
>>> SELECT ROUND(123.4545, 2) -> 123.4500SELECT ROUND (123.45, -2) ->
>>> 100.00SELECT ROUND(150.75, 0) -> 151.00SELECT ROUND (150.75, 0, 1)
>>> -> 150.00
>>>
>>> "Alfonso Garcia" wrote in message
>>> news:uc$
>>>> Hola Grupo
>>>> Necesito saber cómo se hace en SQL ele redondedo de números de 5
>>>> en 5 centésimas. Lo expresaré con un ejemplo: si tengo la medida
>>>> 1.32 cm quiero facturar 1,35. Si la medida es 1.36 facturo 1.40.
>>>> Un saludo
>>>>
>>>> Alfonso J


Respuesta Responder a este mensaje
#8 Manuel Etcheto
01/12/2003 - 19:35 | Informe spam
Prueba
ALTER FUNCTION dbo.obtienevalor
( @numero decimal(15,3) ) -- ver 3
RETURNS decimal (15,2)
AS
BEGIN
RETURN CEILING((@Numero*20))/20
END

Suerte
Manuel

Gracias a todos por la ayuda ,
Cuando el segundo decimal es 0 o 5 y el tercer decimal


es menor que 5 no
suma a la siguiente tabla.
Por ejemplo 1.203 nos sale 1.20 en vez de 1.25.

Alfonso J

"Javier Loria" escribió en el mensaje
news:#
Hola:
No me di cuenta que el requerimiento era rendodear




hacia arriba :(
El codigo de Ulises queda un poco mejor asi:
ALTER FUNCTION dbo.fn_obtienevalor
( @numero decimal(15,2) )
RETURNS decimal (15,2)
AS
BEGIN
RETURN FLOOR((@Numero+.0499999)*20)/20
END

Saludos,


Javier Loria
Costa Rica
Se aprecia la inclusion de DDL (CREATE, INSERTS, etc.)
que pueda ser copiado y pegado al Query Analizer.
La version de SQL y Service Pack tambien ayuda.
ulises escribio:
> Con el permiso de Javier, le haría una pequeña suma




para
> obtener lo deseado por Alfonso; si lo manejamos en una
> función :
>
> CREATE FUNCTION dbo.fn_obtienevalor
> ( @numero decimal(15,2) )
> RETURNS decimal (15,2)
> AS
> BEGIN
> DECLARE @valor as decimal(15,2)
> SELECT @valor = ROUND(@numero*20,0)/20
> IF @valor < @numero SET @valor = @valor + 0.05




ELSE SET
> @valor = @numero
> RETURN (@valor)
> END
>
> si ejecutamos :
>
> SELECT dbo.fn_obtienevalor(1.32)
> SELECT dbo.fn_obtienevalor(1.35)
> SELECT dbo.fn_obtienevalor(1.36)
> SELECT dbo.fn_obtienevalor(1.40)
>
> obtendremos 1.35, 1.35, 1.40 y 1.40 respectivamente.
>
> Saludos,
> Ulises
>
>> Hola Alfonso:
>> Si quires redondear en bloques de 5, debes usar




la funcion que
>> explica Gustavo con un truco que es multiplicar por




20 y dividir por
>> 20. SELECT ROUND(123.46*20,0)/20
>> El multiplicar por 20, redondera y luego dividir por




20 te debe
>> brindar el resultado deseado. .
>> Saludos,
>>
>> Javier Loria
>> Costa Rica
>> Se aprecia la inclusion de DDL (CREATE, INSERTS,




etc.)
>> que pueda ser copiado y pegado al Query Analizer.
>> La version de SQL y Service Pack tambien ayuda.
>> Gustavo Larriera [MVP]
> escribio:
>>> Puedes probar con ROUND, algunos ejemplos del Books




Online:
>>>
>>> SELECT ROUND(123.4545, 2) -> 123.4500SELECT ROUND




(123.45, -2) ->
>>> 100.00SELECT ROUND(150.75, 0) -> 151.00SELECT ROUND




(150.75, 0, 1)
>>> -> 150.00
>>>
>>> "Alfonso Garcia" wrote in




message
>>> news:uc$
>>>> Hola Grupo
>>>> Necesito saber cómo se hace en SQL ele redondedo




de números de 5
>>>> en 5 centésimas. Lo expresaré con un ejemplo: si




tengo la medida
>>>> 1.32 cm quiero facturar 1,35. Si la medida es 1.36




facturo 1.40.
>>>> Un saludo
>>>>
>>>> Alfonso J






.

Respuesta Responder a este mensaje
#9 Alfonso Garcia
01/12/2003 - 20:04 | Informe spam
Ahora sí

Gracias

Un Saludo
Alfonso J


"Manuel Etcheto" escribió en el
mensaje news:011101c3b839$f66337d0$
Prueba
ALTER FUNCTION dbo.obtienevalor
( @numero decimal(15,3) ) -- ver 3
RETURNS decimal (15,2)
AS
BEGIN
RETURN CEILING((@Numero*20))/20
END

Suerte
Manuel

Gracias a todos por la ayuda ,
Cuando el segundo decimal es 0 o 5 y el tercer decimal


es menor que 5 no
suma a la siguiente tabla.
Por ejemplo 1.203 nos sale 1.20 en vez de 1.25.

Alfonso J

"Javier Loria" escribió en el mensaje
news:#
Hola:
No me di cuenta que el requerimiento era rendodear




hacia arriba :(
El codigo de Ulises queda un poco mejor asi:
ALTER FUNCTION dbo.fn_obtienevalor
( @numero decimal(15,2) )
RETURNS decimal (15,2)
AS
BEGIN
RETURN FLOOR((@Numero+.0499999)*20)/20
END

Saludos,


Javier Loria
Costa Rica
Se aprecia la inclusion de DDL (CREATE, INSERTS, etc.)
que pueda ser copiado y pegado al Query Analizer.
La version de SQL y Service Pack tambien ayuda.
ulises escribio:
> Con el permiso de Javier, le haría una pequeña suma




para
> obtener lo deseado por Alfonso; si lo manejamos en una
> función :
>
> CREATE FUNCTION dbo.fn_obtienevalor
> ( @numero decimal(15,2) )
> RETURNS decimal (15,2)
> AS
> BEGIN
> DECLARE @valor as decimal(15,2)
> SELECT @valor = ROUND(@numero*20,0)/20
> IF @valor < @numero SET @valor = @valor + 0.05




ELSE SET
> @valor = @numero
> RETURN (@valor)
> END
>
> si ejecutamos :
>
> SELECT dbo.fn_obtienevalor(1.32)
> SELECT dbo.fn_obtienevalor(1.35)
> SELECT dbo.fn_obtienevalor(1.36)
> SELECT dbo.fn_obtienevalor(1.40)
>
> obtendremos 1.35, 1.35, 1.40 y 1.40 respectivamente.
>
> Saludos,
> Ulises
>
>> Hola Alfonso:
>> Si quires redondear en bloques de 5, debes usar




la funcion que
>> explica Gustavo con un truco que es multiplicar por




20 y dividir por
>> 20. SELECT ROUND(123.46*20,0)/20
>> El multiplicar por 20, redondera y luego dividir por




20 te debe
>> brindar el resultado deseado. .
>> Saludos,
>>
>> Javier Loria
>> Costa Rica
>> Se aprecia la inclusion de DDL (CREATE, INSERTS,




etc.)
>> que pueda ser copiado y pegado al Query Analizer.
>> La version de SQL y Service Pack tambien ayuda.
>> Gustavo Larriera [MVP]
> escribio:
>>> Puedes probar con ROUND, algunos ejemplos del Books




Online:
>>>
>>> SELECT ROUND(123.4545, 2) -> 123.4500SELECT ROUND




(123.45, -2) ->
>>> 100.00SELECT ROUND(150.75, 0) -> 151.00SELECT ROUND




(150.75, 0, 1)
>>> -> 150.00
>>>
>>> "Alfonso Garcia" wrote in




message
>>> news:uc$
>>>> Hola Grupo
>>>> Necesito saber cómo se hace en SQL ele redondedo




de números de 5
>>>> en 5 centésimas. Lo expresaré con un ejemplo: si




tengo la medida
>>>> 1.32 cm quiero facturar 1,35. Si la medida es 1.36




facturo 1.40.
>>>> Un saludo
>>>>
>>>> Alfonso J






.

email Siga el debate Respuesta Responder a este mensaje
Ads by Google
Help Hacer una pregunta AnteriorRespuesta Tengo una respuesta
Search Busqueda sugerida