SQl: Error calculando

11/07/2005 - 12:11 por raul.fenollar | Informe spam
Abajo he puesto un ejemplo de unos cálculos de SQL, que cambian si se
realizan todos en una única línea de código, o se realizan en varios pasos:

Lo primero que he puesto ha sido una operación base, con las constantes que
se usan para el cálculo de forma que nos sirva de Ejemplo:

y despúes he puesto el cálculo con variables, viendo que si el cálculo se
realiza todo de golpe, el resultado no es correcto, pero que si lo
realizamos por partes si que funciona bien, con la salvedad del número de
decimales que saca, ya que a pesar de ser todas las variables utilizadas
decimal(28,6), ni saca 6 decimales, ni saca como la primera operación todos
los deimales, si no que se lo monta para sacar 10...

- Me gustaria saber si esto estaba documentado, y hasta que punto es normal
el tema de los decimales en la división.


Muchas gracias a todos.

José Raúl Fenollar Martínez
Gandia (Valencia)


SELECT
Cálculo_1_A_6_Decimales=convert(decimal(28,6),(6000.000000+((12.300000+0.000000)*10.000000)+0.000000+0.000000)/210.000000),
Cálculo_1_A_X_Decimales=(6000.000000+((12.300000+0.000000)*10.000000)+0.000000+0.000000)/210.000000


DECLARE
@1 DECIMAL(28,6),
@2 DECIMAL(28,6),
@3 DECIMAL(28,6),
@4 DECIMAL(28,6),
@5 DECIMAL(28,6),
@6 DECIMAL(28,6),
@7 DECIMAL(28,6),
@8 DECIMAL(28,6),
@9 DECIMAL(28,6),
@10 DECIMAL(28,6)

SELECT
@1`00,
@2.3,
@3=0,
@4,
@5=0,
@6=0,
@7!0

SELECT
Cálculo_2_A_6_Decimales=convert(decimal(28,6),(@1+((@2+@3)*@4)+@5+@6)/@7),
Cálculo_2_A_X_Decimales=(@1+((@2+@3)*@4)+@5+@6)/@7


SELECT
@8=(@2+@3)*@4

SELECT
@9=@1+@8

SELECT
@10=@9+@5+@6

SELECT Cálculo_3_A_6_Decimales=convert(decimal(28,6),@10/@7),
Cálculo_3_A_X_Decimales=@10/@7
 

Leer las respuestas

#1 Maxi
11/07/2005 - 13:59 | Informe spam
Hola, es que no estas haciendo lo mismo por eso pasa eso. En el segundo
ejemplo no estas pasando los mismos decimales y ahi tienes el error, pasale
los mismos decimales y cuentame ;)


Salu2
Maxi


"raul.fenollar" escribió en el mensaje
news:
Abajo he puesto un ejemplo de unos cálculos de SQL, que cambian si se
realizan todos en una única línea de código, o se realizan en varios
pasos:

Lo primero que he puesto ha sido una operación base, con las constantes
que se usan para el cálculo de forma que nos sirva de Ejemplo:

y despúes he puesto el cálculo con variables, viendo que si el cálculo se
realiza todo de golpe, el resultado no es correcto, pero que si lo
realizamos por partes si que funciona bien, con la salvedad del número de
decimales que saca, ya que a pesar de ser todas las variables utilizadas
decimal(28,6), ni saca 6 decimales, ni saca como la primera operación
todos los deimales, si no que se lo monta para sacar 10...

- Me gustaria saber si esto estaba documentado, y hasta que punto es
normal el tema de los decimales en la división.


Muchas gracias a todos.

José Raúl Fenollar Martínez
Gandia (Valencia)


SELECT
Cálculo_1_A_6_Decimales=convert(decimal(28,6),(6000.000000+((12.300000+0.000000)*10.000000)+0.000000+0.000000)/210.000000),

Cálculo_1_A_X_Decimales=(6000.000000+((12.300000+0.000000)*10.000000)+0.000000+0.000000)/210.000000


DECLARE
@1 DECIMAL(28,6),
@2 DECIMAL(28,6),
@3 DECIMAL(28,6),
@4 DECIMAL(28,6),
@5 DECIMAL(28,6),
@6 DECIMAL(28,6),
@7 DECIMAL(28,6),
@8 DECIMAL(28,6),
@9 DECIMAL(28,6),
@10 DECIMAL(28,6)

SELECT
@1`00,
@2.3,
@3=0,
@4,
@5=0,
@6=0,
@7!0

SELECT
Cálculo_2_A_6_Decimales=convert(decimal(28,6),(@1+((@2+@3)*@4)+@5+@6)/@7),
Cálculo_2_A_X_Decimales=(@1+((@2+@3)*@4)+@5+@6)/@7


SELECT
@8=(@2+@3)*@4

SELECT
@9=@1+@8

SELECT
@10=@9+@5+@6

SELECT Cálculo_3_A_6_Decimales=convert(decimal(28,6),@10/@7),
Cálculo_3_A_X_Decimales=@10/@7



Preguntas similares