Hola Fernando, lo he probado con lo que me has dicho y en efecto funciona correctamente.

Gracias por la ayuda.

JMP






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

20/12/2004 15:36

Por favor, responda a
[EMAIL PROTECTED]

Para
[EMAIL PROTECTED]
cc
Asunto
Re: Problemas con el EVAL





[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

Attachment: fperez.vcf
Description: Binary data

Responder a