Problemas de redondeo

25/10/2005 - 17:04 por Kinomakino | Informe spam
Muchas gracias de antemano por las respuestas.

El problema que se me plantea es el siguiente:

go
if exists (select * from dbo.sysobjects where id =
object_id(N'[dbo].[proc_cuenta_62500003]') and OBJECTPROPERTY(id,
N'IsProcedure') = 1)
drop procedure [dbo].[proc_cuenta_62500003]
GO

create procedure proc_cuenta_62500003
@maquinaria as decimal (9,2)=0,
@afilados as decimal (9,2)=0,
@taller as decimal (9,2)=0,
@consumible as decimal (9,2)=0,
@herraje as decimal (9,2)=0

as
select @maquinaria = porcentaje from porcentaje_ventas where departamento
like 'maquinaria'
print @maquinaria
select @maquinaria =@maquinaria/100
print @maquinaria


resultado : en el primer print me sale 49.79, y en el segundo 0.50.
Descartado el problema del print, porque si lo introduzco en la BBDD me da
el mismo dato.

A alguien se le ocurre algo????

Preguntas similare

Leer las respuestas

#1 Miguel Egea
25/10/2005 - 18:03 | Informe spam
¿que es lo que ves mal en el resultado?

Si yo divido 49.79 entre 100 da 0.4979, pero tengo que redondear, lo que hay
detrás, como 7 es mayor que 5 se rendondea al alza (disculpa la obviedad)

Miguel Egea

SQL Server MVP, Mentor
Solid Quality Learning
http://www.SolidQualityLearning.com

"Solid Quality Learning is the trusted global provider of advanced education
and solutions for the entire Microsoft database platform"

"Kinomakino" wrote in message
news:
Muchas gracias de antemano por las respuestas.

El problema que se me plantea es el siguiente:

go
if exists (select * from dbo.sysobjects where id =
object_id(N'[dbo].[proc_cuenta_62500003]') and OBJECTPROPERTY(id,
N'IsProcedure') = 1)
drop procedure [dbo].[proc_cuenta_62500003]
GO

create procedure proc_cuenta_62500003
@maquinaria as decimal (9,2)=0,
@afilados as decimal (9,2)=0,
@taller as decimal (9,2)=0,
@consumible as decimal (9,2)=0,
@herraje as decimal (9,2)=0

as
select @maquinaria = porcentaje from porcentaje_ventas where departamento
like 'maquinaria'
print @maquinaria
select @maquinaria =@maquinaria/100
print @maquinaria


resultado : en el primer print me sale 49.79, y en el segundo 0.50.
Descartado el problema del print, porque si lo introduzco en la BBDD me da
el mismo dato.

A alguien se le ocurre algo????


Respuesta Responder a este mensaje
#2 Lautaurus
25/10/2005 - 19:06 | Informe spam
¿No puedes elegir otro tipo de datos? Si eliges decimal(5,2) la
precisión es de 2 decimales, obviamente vas a tener problemas de
redondeo en la segunda cifra. Pon más decimales, o elige otro tipo más
apropiado (money, smallmoney,


Kinomakino escribió:
Disculpada la obviedad,pero esperaba que se me comentase como solucionar el
problema que se me presenta, por muy obvio que parezca el problema, y en
consecuencia la solución, para mi no lo es,por eso recurro a vosotros
Respuesta Responder a este mensaje
#3 Kinomakino
25/10/2005 - 19:46 | Informe spam
Disculpada la obviedad,pero esperaba que se me comentase como solucionar el
problema que se me presenta, por muy obvio que parezca el problema, y en
consecuencia la solución, para mi no lo es,por eso recurro a vosotros

"Miguel Egea" escribió en el mensaje
news:%
¿que es lo que ves mal en el resultado?

Si yo divido 49.79 entre 100 da 0.4979, pero tengo que redondear, lo que
hay detrás, como 7 es mayor que 5 se rendondea al alza (disculpa la
obviedad)

Miguel Egea

SQL Server MVP, Mentor
Solid Quality Learning
http://www.SolidQualityLearning.com

"Solid Quality Learning is the trusted global provider of advanced
education and solutions for the entire Microsoft database platform"

"Kinomakino" wrote in message
news:
Muchas gracias de antemano por las respuestas.

El problema que se me plantea es el siguiente:

go
if exists (select * from dbo.sysobjects where id =
object_id(N'[dbo].[proc_cuenta_62500003]') and OBJECTPROPERTY(id,
N'IsProcedure') = 1)
drop procedure [dbo].[proc_cuenta_62500003]
GO

create procedure proc_cuenta_62500003
@maquinaria as decimal (9,2)=0,
@afilados as decimal (9,2)=0,
@taller as decimal (9,2)=0,
@consumible as decimal (9,2)=0,
@herraje as decimal (9,2)=0

as
select @maquinaria = porcentaje from porcentaje_ventas where departamento
like 'maquinaria'
print @maquinaria
select @maquinaria =@maquinaria/100
print @maquinaria


resultado : en el primer print me sale 49.79, y en el segundo 0.50.
Descartado el problema del print, porque si lo introduzco en la BBDD me
da el mismo dato.

A alguien se le ocurre algo????






Respuesta Responder a este mensaje
#4 Alejandro Mesa
26/10/2005 - 01:35 | Informe spam
Kinomakino,

El problema no esta en la operacion de division, sino que el resultado (el
cual pudiera tener mas de dos decimales) se lo asignas nuevamente a la
variable @maquinaria que es decimal(9, 2) y por lo tanto sql server debe
redondear el resultado a dos decimales. Si escojes poner el resultado de la
division en una variable con mayor escala, entonces veras lo que digo.

declare @x decimal(9, 2)
declare @y decimal(9, 4)

set @x = 49.79
set @y = @x / 100

select @x, @x / 100, @y
go


AMB

"Kinomakino" wrote:

Muchas gracias de antemano por las respuestas.

El problema que se me plantea es el siguiente:

go
if exists (select * from dbo.sysobjects where id =
object_id(N'[dbo].[proc_cuenta_62500003]') and OBJECTPROPERTY(id,
N'IsProcedure') = 1)
drop procedure [dbo].[proc_cuenta_62500003]
GO

create procedure proc_cuenta_62500003
@maquinaria as decimal (9,2)=0,
@afilados as decimal (9,2)=0,
@taller as decimal (9,2)=0,
@consumible as decimal (9,2)=0,
@herraje as decimal (9,2)=0

as
select @maquinaria = porcentaje from porcentaje_ventas where departamento
like 'maquinaria'
print @maquinaria
select @maquinaria =@maquinaria/100
print @maquinaria


resultado : en el primer print me sale 49.79, y en el segundo 0.50.
Descartado el problema del print, porque si lo introduzco en la BBDD me da
el mismo dato.

A alguien se le ocurre algo????



Respuesta Responder a este mensaje
#5 Kinomakino
26/10/2005 - 10:06 | Informe spam
gracias. de momento he probado con mas decimales y me funciona

"Lautaurus" escribió en el mensaje
news:435e6632$0$41144$
¿No puedes elegir otro tipo de datos? Si eliges decimal(5,2) la precisión
es de 2 decimales, obviamente vas a tener problemas de redondeo en la
segunda cifra. Pon más decimales, o elige otro tipo más apropiado (money,
smallmoney,


Kinomakino escribió:
Disculpada la obviedad,pero esperaba que se me comentase como solucionar
el problema que se me presenta, por muy obvio que parezca el problema, y
en consecuencia la solución, para mi no lo es,por eso recurro a vosotros



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