Cómo crear una expresión numérica

En esta sección:

Cómo:

Referencia:

Una expresión numérica realiza un cálculo que usa constantes, campos, operadores y funciones numéricas para devolver un valor numérico. Cuando utilice una expresión numérica para asignar un valor a un campo, dicho campo deben tener un formato numérico. El formato predeterminado es D12.2.

Una expresión numérica puede contener los siguientes componentes, que aparecen abajo en rojo:

Antes de utilizarlos para realizar cálculos, los valores numéricos se convierten por lo general en formato de punto flotante de doble precisión. Luego el resultado se convierte al formato del campo específico. En algunos casos, la conversión podría arrojar diferencias en el redondeo. Tenga en cuenta que los entornos que admiten aritmética de modo nativo manejan el redondeo de manera distinta. Para obtener información detallada, consulte Cómo evaluar expresiones numéricas con aritmética de modo nativo.

Si un número es demasiado grande (mayor de 1075) o demasiado pequeño(menor de 10-75), recibe una advertencia de exceso o de falta y aparece asteriscos en el lugar correspondiente al valor de campo.

Nota: Puede cambiar el carácter de desbordamiento emitiendo el comando SET OVERFLOWCHAR.

Para más información sobre el comportamiento de redondeo en formatos numéricos, consulte el manual Cómo describir datos con el lenguaje WebFOCUS .


Principio de página

x
Sintaxis: Cómo Expresar un número en notación científica

En una cláusula IF, utilice la sintaxis siguiente:

IF field op n[.nn]{E|D|e|d}[+|-]p 

En una cláusula WHERE, utilice la sintaxis siguiente:

WHERE field op EXPN(n[.nn{E|D|e|d}[+|-]p);

En un comando COMPUTE, utilice la sintaxis siguiente:

COMPUTE field[/format] = EXPN(n[.nn]{{E|D|e|d}[+|-]p);

En un comando DEFINE, utilice la sintaxis siguiente:

DEFINE FILE filename 
field[/format] = EXPN(n[.nn]{E|D|e|d}[+|-]p);
END

En una DEFINE en el archivo máster, utilice la sintaxis siguiente:

DEFINE field[/format] = EXPN(n[.nn]{{E|D|e|d}[+|-]p);

donde:

field
En un campo en la solicitud.
/format
Es el formato opcional del campo. Para más información sobre los formatos , consulte el manual Cómo describir datos con el lenguaje WebFOCUS .
op
Es un operador relacional en una solicitud.
n.nn
Es una constante numérica que consta de un componente numérico completo, seguido de un punto decimal, seguido de un componente fraccional.
E, D, e, d
Indica notación científica. E, e, d y D son intercambiables.
+, -
Indica si p es positivo o negativo. Positivo es el valor predefinido.
p
Es la potencia de 10 a la que hay que elevar el número. El intervalo de valores de p está entre -78 y +78, en z/OS, y -99 y +99 en el resto de plataformas.

Nota: EXPN es útil para cálculos en campos de formato F y D. Por lo general, no es útil para cálculos en campos de formato P o I.



Ejemplo: Cómo evaluar un número en notación científica

Puede utilizar notación científica en una cláusula IF o WHERE para expresar 8000 como 8E+03:

IF RCOST LT 8E+03
WHERE RCOST LT EXPN(8E+03)

Principio de página

x
Referencia: Operadores aritméticos

La siguiente lista muestra los operadores aritméticos que puede utiilizar en una expresión:

Adición

+

Sustracción

-

Multiplicación

*

División

/

Exponenciación

**

Nota: Si desea intentar dividir entre cero, el valor de la expresión es cero. Ningún tipo de expresión de fecha admiten la multiplicación ni la elevación a una potencia. Para aislar parte de una fecha, utilice un comando de asignación simple.



x
Orden de evaluación

Las expresiones numéricas se evalúan en el orden que sigue:

  1. Exponenciación.
  2. División y multiplicación.
  3. Adición y sustracción.

Cuando los operadores están al mismo nivel, se evalúan de izquierda a derecha. Ya que las expresiones entre paréntesis se evalúan antes que cualquier otra expresión, puede utilizar paréntesis para cambiar este orden predefinido. Por ejemplo, las expresiones siguientes producen resultados diferentes debido al uso de paréntesis:

COMPUTE PROFIT/D12.2  =  RETAIL_PRICE  -  UNIT_COST  *  UNIT_SOLD ;
COMPUTE PROFIT/D12.2  = (RETAIL_PRICE  -  UNIT_COST) *  UNIT_SOLD ;

En la primera expresión, UNIT_SOLD se multiplica primero por UNIT_COST y el resultado se resta de RETAIL_PRICE. En la segunda expresión primero se resta UNIT_COST de RETAIL_PRICE y el resultado se multiplica por UNIT_SOLD.

Nota: No pueden aparecer dos operadores de forma consecutiva. La siguiente expresión es incorrecta:

a * -1

Para que sea válida, añada paréntesis:

a* (-1)


Ejemplo: Cómo controlar el orden de evaluación

El orden de evaluación puede afectar el resultado de una expresión. Digamos que desea determinar la pérdida en dólares en ventas al detalle atribuibles a devoluciones de artículos dañados. Puede emitir la siguiente solicitud:

TABLE FILE SALES
PRINT RETAIL_PRICE RETURNS DAMAGED
COMPUTE RETAIL_LOSS/D12.2 = RETAIL_PRICE * RETURNS + DAMAGED;
BY PROD_CODE
WHERE PROD_CODE IS 'E1';
END

El cálculo

COMPUTE RETAIL_LOSS/D12.2 = RETAIL_PRICE * RETURNS + DAMAGED;

arroja un resultado incorrecto porque RETAIL_PRICE se multiplica primero por RETURNS y después se suma el resultado a DAMAGED. El resultado correcto se logra sumando RETURNS a DAMAGED y después multiplicando el resultado por RETAIL_PRICE.

El orden de evaluación cambia al poner una expresión entre paréntesis. Una expresión en paréntesis se evalúa antes que cualquier otra expresión. También se puede utilizar el paréntesis para mejorar la legibilidad.

Si utiliza paréntesis, la sintaxis correcta para el cálculo anterior es:

COMPUTE RETAIL_LOSS/D12.2 = RETAIL_PRICE * (RETURNS + DAMAGED);

La salida es:

PROD_CODE  RETAIL_PRICE  RETURNS  DAMAGED     RETAIL_LOSS
---------  ------------  -------  -------     -----------
E1                 $.89        4        7            9.79

Principio de página

x
Cómo evaluar expresiones numéricas con aritmética de modo nativo

Cuando se utiliza aritmética de modo nativo, se sigue una ruta de evaluación específica para cada expresión numérica basada en el formato de los operandos y los operadores. Si todos los operandos tienen el mismo formato, la mayoría de las operaciones se realizan en ese formato: Si los operandos tienen formatos diferentes, se convierten los operandos al formato común en un orden específico de precedencia de formato. Independientemente de los formatos de operandos, algunos operadores requieren conversión a formatos específicos, de manera que todos los operandos estén en los formatos adecuados.


Principio de página

x
Cómo utilizar formatos de operandos idénticos con aritmética de modo nativo

Si todos los operandos de un operador numérico tienen el mismo formato, puede utilizar la tabla siguiente para determinar si se realizan las operaciones en dicho formato nativo o si se convierten los operandos antes y después de ejecutar la operación. En cada caso que requiera conversión, los operandos se convierten al formato operacional y se devuelve el resultado intermedio en el formato operacional. Si el formato del resultado difiere del formato de la variable de destino, el resultado se convierte al formato de la variable de destino.

Operación

 

Formato operacional

Adición

+

Nativo

Sustracción

-

Nativo

Multiplicación

*

Nativo

División completa

/

Acepta punto flotante de precisión simple o doble y convierte todos los demás a punto flotante de doble precisión.

Exponenciación

**

Punto flotante de doble precisión



Ejemplo: Cómo utilizar formatos de operandos idénticos (aritmética de modo nativo)

Las variables siguientes se definen como números enteros en WebFOCUS Maintain:

COMPUTE OPERANDONE/I4  ;
        OPERANDTWO/I4  ;
        RESULT/I4  ;

La multiplicación requerida se realiza en aritmética de modo nativo (aritmética de número enteros):

COMPUTE RESULT/I4 = OPERANDONE * OPERANDTWO  ;

Principio de página

x
Cómo utilizar formatos de operandos diferentes con aritmética de modo nativo

Si los operandos de un operador numérico tienen formatos diferentes, puede utilizar la siguiente tabla para determinar cuál es el formato común después de haberlos convertido. El operando más bajo se convierte al formato del operando más alto antes de realizar la operación.

Orden

Formato

1

Decimal empaquetado de 16 bytes

2

Punto flotante de doble precisión

3

Decimal empaquetado de 8 bytes

4

Punto flotante de precisión simple

5

Número entero

6

carácter (alfanumérico y texto)

Por ejemplo, si se utiliza en una expresión un operando en decimal empaquetado de 16 bytes, todos los demás operandos se convierten en formato de decimal empaquetado de 16 bytes para evaluación. Por otra parte, si una expresión incluye sólo números enteros y operandos alfanuméricos, todos los operandos alfanuméricos se convierten en formato de números enteros.

Un valor de carácter (sea alfanumérico o texto) puede usarse en un cálculo si es una cadena numérica. Se hace un intento por convertir el operando de carácter en el formato del otro operando en la expresión. Si ambos operandos son caracteres, se hace un intento por convertirlos en doble precisión. Si no es posible convertirlos, se genera un mensaje de error.

Si asigna un valor decimal a un número entero, se trunca el valor fraccional.


WebFOCUS