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
|
|
[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
|
|
[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
fperez.vcf
Description: Binary data
