Problema de redondeo

27/10/2008 - 17:26 por Miguel | Informe spam
Hola:

A ver si puedo explicar mi problema, tengo la siguiente consulta:

declare @lncuota numeric(18, 7)

SET @lnCuota = (((SELECT (Interes + (SELECT BalanceCapital FROM Prestamo
WHERE Transaccion = 4 AND Estado = 1) / (SELECT Tiempo FROM Prestamo WHERE
Transaccion = 4 AND Estado = 1))
FROM Amortizacion
WHERE Transaccion = 4 AND NumCuota = 1)) -

(SELECT ISNULL(SUM(Importe), 0.00)
FROM Pago
WHERE Prestamo = 4 AND NumCuota = 1 AND
Estado = 1)

)
select @lncuota

Aquí presento una resta de dos consultas para que el resultado se acumule en
la varible @lnCuota, el caso es que busco que el resultado me muestre 7
decimales en lo que ya están establecidos en los campos de la tabla de la
primera consulta. Si ejecuto solo la primera consulta sin hacer la resta el
resultado me produce 7 decimales como lo quiero, pero al colocarle la resta
de la segunda consulta, el resultado se redondea a 2 decimales que eso es lo
que no quiero, he probado utilizando round(..., 7) en la segunda consulta y
no funciona y lo que no entiendo es que por qué lo hace así si la primera
consulta me devuelve 7 decimales. Lo que busco con este resultado es que me
aparezca con 7 decimales.

Gracias,


Miguel

Preguntas similare

Leer las respuestas

#1 Alejandro Mesa
27/10/2008 - 18:14 | Informe spam
Miguel,

Que tipo de data es [Interes], [BalanceCapital] , [Tiempo] e [Importe]?

Quizas tengas que convertir esos valores a numeric(18, 7) , al menos uno de
ellos.


AMB


"Miguel" wrote:

Hola:

A ver si puedo explicar mi problema, tengo la siguiente consulta:

declare @lncuota numeric(18, 7)

SET @lnCuota = (((SELECT (Interes + (SELECT BalanceCapital FROM Prestamo
WHERE Transaccion = 4 AND Estado = 1) / (SELECT Tiempo FROM Prestamo WHERE
Transaccion = 4 AND Estado = 1))
FROM Amortizacion
WHERE Transaccion = 4 AND NumCuota = 1)) -

(SELECT ISNULL(SUM(Importe), 0.00)
FROM Pago
WHERE Prestamo = 4 AND NumCuota = 1 AND
Estado = 1)

)
select @lncuota

Aquí presento una resta de dos consultas para que el resultado se acumule en
la varible @lnCuota, el caso es que busco que el resultado me muestre 7
decimales en lo que ya están establecidos en los campos de la tabla de la
primera consulta. Si ejecuto solo la primera consulta sin hacer la resta el
resultado me produce 7 decimales como lo quiero, pero al colocarle la resta
de la segunda consulta, el resultado se redondea a 2 decimales que eso es lo
que no quiero, he probado utilizando round(..., 7) en la segunda consulta y
no funciona y lo que no entiendo es que por qué lo hace así si la primera
consulta me devuelve 7 decimales. Lo que busco con este resultado es que me
aparezca con 7 decimales.

Gracias,


Miguel



Respuesta Responder a este mensaje
#2 Miguel
27/10/2008 - 19:47 | Informe spam
Si, son Numeric(18, 7) pero la consulta donde están esos campos sale bien
con los 7 decimales, el problema está cuando le resto la segunda consulta
que lo redondea, p.e. si hago esto con la primera consulta el resultado de
los decimales es de 7:

declare @lnCuota numeric(18, 7)

SET @lnCuota = (((SELECT (Interes + (SELECT BalanceCapital FROM Prestamo
WHERE Transaccion = 4 AND Estado = 1) / (SELECT Tiempo FROM Prestamo WHERE
Transaccion = 4 AND Estado = 1))
FROM Amortizacion
WHERE Transaccion = 4 AND NumCuota = 1)))

SELECT @lnCuota


Pero si hago esto me lo redondea a 2 decimales:

declare @lnCuota numeric(18, 7)

SET @lnCuota = (((SELECT (Interes + (SELECT BalanceCapital FROM Prestamo
WHERE Transaccion = 4 AND Estado = 1) / (SELECT Tiempo FROM Prestamo WHERE
Transaccion = 4 AND Estado = 1))
FROM Amortizacion
WHERE Transaccion = 4 AND NumCuota = 1))
/* Incluyo esta parte*/

- (SELECT ISNULL(SUM(Importe), 0.00) FROM Pago WHERE Prestamo = 4 AND
NumCuota = 1 AND Estado = 1))

SELECT @lnCuota



declare @lncuota numeric(18, 7)

SET @lnCuota = (((SELECT (Interes + (SELECT BalanceCapital FROM Prestamo
WHERE Transaccion = 4 AND Estado = 1) / (SELECT Tiempo FROM Prestamo
WHERE
Transaccion = 4 AND Estado = 1))
FROM Amortizacion
WHERE Transaccion = 4 AND NumCuota = 1)) -

(SELECT ISNULL(SUM(Importe), 0.00)
FROM Pago
WHERE Prestamo = 4 AND NumCuota = 1 AND
Estado = 1)

)






"Alejandro Mesa" wrote in message
news:
Miguel,

Que tipo de data es [Interes], [BalanceCapital] , [Tiempo] e [Importe]?

Quizas tengas que convertir esos valores a numeric(18, 7) , al menos uno
de
ellos.


AMB


"Miguel" wrote:

Hola:

A ver si puedo explicar mi problema, tengo la siguiente consulta:

declare @lncuota numeric(18, 7)

SET @lnCuota = (((SELECT (Interes + (SELECT BalanceCapital FROM Prestamo
WHERE Transaccion = 4 AND Estado = 1) / (SELECT Tiempo FROM Prestamo
WHERE
Transaccion = 4 AND Estado = 1))
FROM Amortizacion
WHERE Transaccion = 4 AND NumCuota = 1)) -

(SELECT ISNULL(SUM(Importe), 0.00)
FROM Pago
WHERE Prestamo = 4 AND NumCuota = 1 AND
Estado = 1)

)
select @lncuota

Aquí presento una resta de dos consultas para que el resultado se acumule
en
la varible @lnCuota, el caso es que busco que el resultado me muestre 7
decimales en lo que ya están establecidos en los campos de la tabla de la
primera consulta. Si ejecuto solo la primera consulta sin hacer la resta
el
resultado me produce 7 decimales como lo quiero, pero al colocarle la
resta
de la segunda consulta, el resultado se redondea a 2 decimales que eso es
lo
que no quiero, he probado utilizando round(..., 7) en la segunda consulta
y
no funciona y lo que no entiendo es que por qué lo hace así si la primera
consulta me devuelve 7 decimales. Lo que busco con este resultado es que
me
aparezca con 7 decimales.

Gracias,


Miguel



Respuesta Responder a este mensaje
#3 Miguel
27/10/2008 - 20:05 | Informe spam
Gracias Alejandro, lo corregí como me dices, el campo IMPORTE no estaba
definido con 7 posiciones

Muchas gracias ya está corregido

"Miguel" wrote in message
news:
Si, son Numeric(18, 7) pero la consulta donde están esos campos sale bien
con los 7 decimales, el problema está cuando le resto la segunda consulta
que lo redondea, p.e. si hago esto con la primera consulta el resultado de
los decimales es de 7:

declare @lnCuota numeric(18, 7)

SET @lnCuota = (((SELECT (Interes + (SELECT BalanceCapital FROM Prestamo
WHERE Transaccion = 4 AND Estado = 1) / (SELECT Tiempo FROM Prestamo WHERE
Transaccion = 4 AND Estado = 1))
FROM Amortizacion
WHERE Transaccion = 4 AND NumCuota = 1)))

SELECT @lnCuota


Pero si hago esto me lo redondea a 2 decimales:

declare @lnCuota numeric(18, 7)

SET @lnCuota = (((SELECT (Interes + (SELECT BalanceCapital FROM Prestamo
WHERE Transaccion = 4 AND Estado = 1) / (SELECT Tiempo FROM Prestamo WHERE
Transaccion = 4 AND Estado = 1))
FROM Amortizacion
WHERE Transaccion = 4 AND NumCuota = 1))
/* Incluyo esta parte*/

- (SELECT ISNULL(SUM(Importe), 0.00) FROM Pago WHERE Prestamo = 4 AND
NumCuota = 1 AND Estado = 1))

SELECT @lnCuota



declare @lncuota numeric(18, 7)

SET @lnCuota = (((SELECT (Interes + (SELECT BalanceCapital FROM Prestamo
WHERE Transaccion = 4 AND Estado = 1) / (SELECT Tiempo FROM Prestamo
WHERE
Transaccion = 4 AND Estado = 1))
FROM Amortizacion
WHERE Transaccion = 4 AND NumCuota =
1)) -

(SELECT ISNULL(SUM(Importe), 0.00)
FROM Pago
WHERE Prestamo = 4 AND NumCuota = 1 AND
Estado = 1)

)






"Alejandro Mesa" wrote in
message news:
Miguel,

Que tipo de data es [Interes], [BalanceCapital] , [Tiempo] e [Importe]?

Quizas tengas que convertir esos valores a numeric(18, 7) , al menos uno
de
ellos.


AMB


"Miguel" wrote:

Hola:

A ver si puedo explicar mi problema, tengo la siguiente consulta:

declare @lncuota numeric(18, 7)

SET @lnCuota = (((SELECT (Interes + (SELECT BalanceCapital FROM Prestamo
WHERE Transaccion = 4 AND Estado = 1) / (SELECT Tiempo FROM Prestamo
WHERE
Transaccion = 4 AND Estado = 1))
FROM Amortizacion
WHERE Transaccion = 4 AND NumCuota =
1)) -

(SELECT ISNULL(SUM(Importe), 0.00)
FROM Pago
WHERE Prestamo = 4 AND NumCuota = 1 AND
Estado = 1)

)
select @lncuota

Aquí presento una resta de dos consultas para que el resultado se
acumule en
la varible @lnCuota, el caso es que busco que el resultado me muestre 7
decimales en lo que ya están establecidos en los campos de la tabla de
la
primera consulta. Si ejecuto solo la primera consulta sin hacer la resta
el
resultado me produce 7 decimales como lo quiero, pero al colocarle la
resta
de la segunda consulta, el resultado se redondea a 2 decimales que eso
es lo
que no quiero, he probado utilizando round(..., 7) en la segunda
consulta y
no funciona y lo que no entiendo es que por qué lo hace así si la
primera
consulta me devuelve 7 decimales. Lo que busco con este resultado es que
me
aparezca con 7 decimales.

Gracias,


Miguel









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