[EMAIL PROTECTED] escribió:

Hola he encontrado el error. Probar en vuestro sistema, el que quiera,  a ver si tambien lo podemos reproducir en otro AS400.

Yo estoy en V5R2M0.

Definir 3 variables numericas de 8,3 y darles un valor inferior a 1.  El campo de resultado de 15,3

Realizar la multiplicacion con EVAL y verificarla.

Redefinir las 3 variables ahora a 15,3 y seguir dandoles el mismo valor.

Ahora tendria que dar 0.

En teoria no tendria que pasar y el resultado tendria que ser el mismo.

Espero vuestros comentarios.

Un saludo

JMP








Fernando Pérez <[EMAIL PROTECTED]>
Enviado por: [EMAIL PROTECTED]

20/12/2004 15:04

Por favor, responda a
[EMAIL PROTECTED]

Para
[EMAIL PROTECTED]
cc

Asunto
Re: Problemas con el EVAL







[EMAIL PROTECTED] escribió:

Hola a todos, tengo un problema un tanto extraño. Si hago la siguiente operacion me da como resultado 0.


EVAL  CAMPO_RESULTADO = CAMP0_1 * CAMPO_2 * CAMPO_3


Y CAMPO_x no tienen ninguno el valor 0. He realizado un debugger y me quedo a cuadros cuando veo el resultado, estoy pensando que puede ser un problema de PTF.



Os ha ocurrido a alguien?



Un saludo


JMP


Si las variables tienen decimales y el resultado va a ser < 1 es posible que al hacer las operaciones se piedan los decimales, y con ellos todo el resultado.

Prueba a hacer EVAL(R). Esto hace que todos los valores intermedios de la operación tengan al menos el nº de decimales que el campo de resultado.

--
Saludos.


Fernando Pérez  


Cerámica Saloni. Dpto. Sistemas

¡ QUE NO ES UN ERROOOOOOOOOR !

Mirad en el manual de ILE-RPG lo que comenta sobre RESDECPOS y MAXDIGITS y vereis por qué sucede.

Resumiendo:

El nº máximo de cifras con el que trabaja V5R2 es 31 ó 32 (no recuerdo bien).

Si multiplicas 3 variables de 15 dígitos, el valor resultante puede tener hasta 45 cifras.

Si no se ha especificado lo contrario en la hoja H o en el extensor de la operación, el sistema quitará los dígitos menos significativos de las operaciones intermedias para evitar posible desbordamiento, con lo que se pierden los decimales (no pasa con los tres campos de 9 dígitos porque 9*3 = 27, que es menor que el nº máximo de dígitos con los que puede trabajar el sistema). Este es el comportamiento de EVAL si en la hoja H no se ha especificado EXPROPTS(*RESDECPOS).

Si especificamos EXPROPTS(*RESDECPOS) en la hoja H o bien usamos eval(R), el sistema realizará los cálculos intermedios empleando al menos el mismo nº de decimales que tenga el campo donde se almacene el resultado ( en EVAL A = B * C se emplearán al menos el nº de decimales con los que se haya definido A ). Esto soluciona el problema.

Si el I5 tiene bugs, os aseguro que están más escondidos ;-)


--
Saludos.

Fernando Pérez 

Cerámica Saloni. Dpto. Sistemas

begin:vcard
fn;quoted-printable:Fernando P=C3=A9rez
n;quoted-printable:P=C3=A9rez;Fernando
org:;Sistemas
email;internet:[EMAIL PROTECTED]
tel;work:Ext. 627
version:2.1
end:vcard

Responder a