W Pub: ABAP Cursosentenciacompute

<html>

<head>

<title>COMPUTE</title>

</head>

<BODY BGCOLOR="#000000" TEXT="#FFFFFF" LINK="#0099FF" VLINK="#AA0000">

<p align="left">⚠ &lt;b&gt;<span class="titulo">COMPUTE</span>⚠ &lt;/b&gt;</p>

<p align="left" class="gaussr3">⚠ &lt;b&gt;Definicin⚠ &lt;/b&gt;</p>

<p align="left" class="gaussr3">Para procesar objetos de datos numricos al asignar

  el valor resultante a un objeto de datos, se puede utilizar la sentencia compute.</p>

<p align="left" class="gaussr3">⚠ &lt;b&gt;Sintaxis:⚠ &lt;/b&gt;</p>

<pre class="gaussr3">[ COMPUTE ]<campo> = <expresin>.</pre>

<p class="gaussr3">La palabra clave COMPUTE es opcional (nica sentencia que su

  palabra clave es opcional). El resultado de la operacin matemtica especificada 
  en <expresin> se asigna al campo <campo>. Si el resultado de la 
  operacin no tiene el mismo tipo de dato que el campo <campo>, el sistema 
  realiza la conversin oportuna de forma automtica.</p>

<p class="gaussr3">Los operndos de <expresin> deben ser de tipo numrico.</p>

<p class="gaussr3">Los operadores vlidos son los siguientes:</p>

<table border="0" width="100%">

  <tr> 
    <td width="17%" class="gaussr3">⚠ &lt;b&gt;Operador⚠ &lt;/b&gt;</td>
    <td width="29%" class="gaussr3">⚠ &lt;b&gt;Significado⚠ &lt;/b&gt;</td>
    <td width="54%" class="gaussr3">⚠ &lt;b&gt;Ejemplo⚠ &lt;/b&gt;</td>
  </tr>
  <tr> 
    <td width="17%" class="gaussr3">+</td>
    <td width="29%" class="gaussr3">Suma</td>
    <td width="54%" class="gaussr3">resultado = campo1 + campo2.</td>
  </tr>
  <tr> 
    <td width="17%" class="gaussr3">-</td>
    <td width="29%" class="gaussr3">Diferencia</td>
    <td width="54%" class="gaussr3">resultado = campo1 - campo2.</td>
  </tr>
  <tr> 
    <td width="17%" class="gaussr3">*</td>
    <td width="29%" class="gaussr3">Multiplicacin</td>
    <td width="54%" class="gaussr3">resultado = campo1 * campo2.</td>
  </tr>
  <tr> 
    <td width="17%" class="gaussr3">/</td>
    <td width="29%" class="gaussr3">Divisin</td>
    <td width="54%" class="gaussr3">resultado = campo1 / campo2.</td>
  </tr>
  <tr> 
    <td width="17%" class="gaussr3">DIV</td>
    <td width="29%" class="gaussr3">Divisin entera</td>
    <td width="54%" class="gaussr3">resultado = campo1 DIV campo2.</td>
  </tr>
  <tr> 
    <td width="17%" class="gaussr3">MOD</td>
    <td width="29%" class="gaussr3">Resto de una divisin entera</td>
    <td width="54%" class="gaussr3">resultado = campo1 MOD campo2.</td>
  </tr>
  <tr> 
    <td width="17%" class="gaussr3">**</td>
    <td width="29%" class="gaussr3">Exponenciacin</td>
    <td width="54%" class="gaussr3">resultado = campo1 ** campo2.</td>
  </tr>

</table>

<p class="gaussr3">En lugar de utilizar los operadores bsicos +, -, * y / se

  puede utilizar las sentencias ⚠ &lt;a href="add.htm" tppabs="http://www.gaussr3.com/abap4/sentencias/add.htm"&gt;ADD⚠ &lt;/a&gt;, ⚠ &lt;a href="subtract.htm" tppabs="http://www.gaussr3.com/abap4/sentencias/subtract.htm"&gt;SUBTRACT⚠ &lt;/a&gt;, 
  ⚠ &lt;a href="multiply.htm" tppabs="http://www.gaussr3.com/abap4/sentencias/multiply.htm"&gt;MULTIPLY⚠ &lt;/a&gt; y ⚠ &lt;a href="divide.htm" tppabs="http://www.gaussr3.com/abap4/sentencias/divide.htm"&gt;DIVIDE⚠ &lt;/a&gt; respectivamente. 
  Estas sentencias ya las veremos en posteriores apartados. Los operadores vistos 
  anteriormente, as como los parntesis, son palabras clave del lenguaje ABAP/4, 
  por ellos, deben ir con al menos un espacio en blanco por delante y por detrs. 
  En la divisin, el divisor no puede ser cero. Si combinamos varias expresiones, 
  los operadores de igualdad y prioridad se evalan de derecha a izquierda. Excepto 
  en el caso del operador de exponenciacin, que se evala de derecha a izquierda.</p>

<p class="gaussr3">La prioridad a la hora de evaluar una expresin  es la

  siguiente: parntesis, funciones, exponenciacin (**), operadores *, /, MOD 
  y DIV y operadores "+" y "-".</p>

<p class="gaussr3">Adems de los operadores vistos hasta ahora se puede utilizar

  un conjunto de funciones predefinidas. El formato que hay que utilizar es el 
  siguiente:</p>

<pre class="gaussr3">[ COMPUTE ] <campo> = <funcin> ( <argumento> ).</pre>

<ul>

  <li class="gaussr3">Los espacios en blanco entre los parntesis y los argumentos 
    son obligatorios. El resultado de llamar a la funcin <funcin> con 
    el argumento <argumento> es asignado a <campo>. Las funciones 
    existentes pueden clasificarse en los siguientes grupos:</li>
  <li class="gaussr3">Funciones vlidas para todos los tipos numricos (tipo F, 
    I y P). El argumento no tiene por qu ser numrico. Si utilizamos otro tipo, 
    ste es convertido a un tipo numrico. Por razn de optimizacin es recomendable 
    utilizar tipo de datos numricos.</li>
  <li class="gaussr3">Funciones slo para el tipo F. Para estas funciones existen 
    las restricciones normales lgicas de las funciones matemticas, por ejemplo, 
    la raz cuadrada slo es vlida con nmeros positivos. El argumento no tiene 
    por qu ser del tipo F. De no ser de este tipo el sistema realizar la conversin 
    necesaria de forma automtica.</li>

</ul>

<p class="gaussr3">Funciones vlidas para todos los tipos numricos (F, I y P):</p>

<table border="0" width="100%">

  <tr> 
    <td width="17%" class="gaussr3">⚠ &lt;b&gt;Operador⚠ &lt;/b&gt;</td>
    <td width="41%" class="gaussr3">⚠ &lt;b&gt;Significado⚠ &lt;/b&gt;</td>
    <td width="42%" class="gaussr3">⚠ &lt;b&gt;Ejemplo⚠ &lt;/b&gt;</td>
  </tr>
  <tr> 
    <td width="17%" class="gaussr3">ABS</td>
    <td width="41%" class="gaussr3">Valor absoluto del argumento</td>
    <td width="42%" class="gaussr3">resultado = ABS(campo ).</td>
  </tr>
  <tr> 
    <td width="17%" class="gaussr3">SIGN</td>
    <td width="41%" class="gaussr3">Signo del argumento. La funcin de vuelve 
      1 si el argumento es positivo, 0 si el argumento es 0 y -1 si es negativo.</td>
    <td width="42%" valign="top" class="gaussr3">resultado = SIGN(campo ).</td>
  </tr>
  <tr> 
    <td width="17%" class="gaussr3">CEIL</td>
    <td width="41%" class="gaussr3">Valor entero inferior al argumento</td>
    <td width="42%" class="gaussr3">resultado = CEIL(campo ).</td>
  </tr>
  <tr> 
    <td width="17%" class="gaussr3">FLOOR</td>
    <td width="41%" class="gaussr3">Valor entero superior al argumento</td>
    <td width="42%" class="gaussr3">resultado = FLOOR(campo ).</td>
  </tr>
  <tr> 
    <td width="17%" class="gaussr3">TRUNC</td>
    <td width="41%" class="gaussr3">Parte entera del argumento</td>
    <td width="42%" class="gaussr3">resultado = TRUNC(campo1 ).</td>
  </tr>
  <tr> 
    <td width="17%" class="gaussr3">FRAC</td>
    <td width="41%" class="gaussr3">Parte fraccionaria del argumento</td>
    <td width="42%" class="gaussr3">resultado = FRAC(campo1 ).</td>
  </tr>

</table>

<p class="gaussr3">Funciones slo para el tipo F:</p>

<table border="0" width="100%">

  <tr> 
    <td width="17%" class="gaussr3">⚠ &lt;b&gt;Operador⚠ &lt;/b&gt;</td>
    <td width="41%" class="gaussr3">⚠ &lt;b&gt;Significado⚠ &lt;/b&gt;</td>
    <td width="42%" class="gaussr3">⚠ &lt;b&gt;Ejemplo⚠ &lt;/b&gt;</td>
  </tr>
  <tr> 
    <td width="17%" class="gaussr3">ACOS</td>
    <td width="41%" class="gaussr3">Arcocoseno</td>
    <td width="42%" class="gaussr3">resultado = ACOS(campo ).</td>
  </tr>
  <tr> 
    <td width="17%" class="gaussr3">ASIN</td>
    <td width="41%" class="gaussr3">Arcoseno</td>
    <td width="42%" valign="top" class="gaussr3">resultado = ASIN(campo ).</td>
  </tr>
  <tr> 
    <td width="17%" class="gaussr3">ATAN</td>
    <td width="41%" class="gaussr3">Arcotangente</td>
    <td width="42%" class="gaussr3">resultado = ATAN(campo ).</td>
  </tr>
  <tr> 
    <td width="17%" class="gaussr3">COS</td>
    <td width="41%" class="gaussr3">Coseno</td>
    <td width="42%" class="gaussr3">resultado = COS(campo ).</td>
  </tr>
  <tr> 
    <td width="17%" class="gaussr3">SIN</td>
    <td width="41%" class="gaussr3">Seno</td>
    <td width="42%" class="gaussr3">resultado = SINcampo1 ).</td>
  </tr>
  <tr> 
    <td width="17%" class="gaussr3">TAN</td>
    <td width="41%" class="gaussr3">Tangente</td>
    <td width="42%" class="gaussr3">resultado = TAN(campo1 ).</td>
  </tr>
  <tr> 
    <td width="17%" class="gaussr3">COSH</td>
    <td width="41%" class="gaussr3">Coseno hiperblico</td>
    <td width="42%" class="gaussr3">resultado = COSHcampo1 ).</td>
  </tr>
  <tr> 
    <td width="17%" class="gaussr3">SINH</td>
    <td width="41%" class="gaussr3">Seno hiperblico</td>
    <td width="42%" class="gaussr3">resultado = SINHcampo1 ).</td>
  </tr>
  <tr> 
    <td width="17%" class="gaussr3">TANH</td>
    <td width="41%" class="gaussr3">Tangente hiperblico</td>
    <td width="42%" class="gaussr3">resultado = TANH(campo1 ).</td>
  </tr>
  <tr> 
    <td width="17%" class="gaussr3">EXP</td>
    <td width="41%" class="gaussr3">Exponenciacin</td>
    <td width="42%" class="gaussr3">resultado = EXP(campo1 ).</td>
  </tr>
  <tr> 
    <td width="17%" class="gaussr3">LOG</td>
    <td width="41%" class="gaussr3">Logaritmo natural (base e)</td>
    <td width="42%" class="gaussr3">resultado = LOG(campo1 ).</td>
  </tr>
  <tr> 
    <td width="17%" class="gaussr3">LOG10</td>
    <td width="41%" class="gaussr3">Logaritmo base 10</td>
    <td width="42%" class="gaussr3">resultado = LOG10(campo1 ).</td>
  </tr>
  <tr> 
    <td width="17%" class="gaussr3">SQRT</td>
    <td width="41%" class="gaussr3">Raz cuadrada</td>
    <td width="42%" class="gaussr3">resultado = SQRT(campo1 ).</td>
  </tr>

</table>

<p class="gaussr3">Si el atributo ⚠ &lt;i&gt;Aritmtica en coma fija⚠ &lt;/i&gt; no est marcado,

  los campos empaquetados (tipo P) son enteros sin punto decimal. El parmetro 
  DECIMALS de la sentencia ⚠ &lt;a href="data.htm" tppabs="http://www.gaussr3.com/abap4/sentencias/data.htm"&gt;DATA⚠ &lt;/a&gt; slo es efectivo para la 
  sentencia ⚠ &lt;a href="write.htm" tppabs="http://www.gaussr3.com/abap4/sentencias/write.htm"&gt;WRITE⚠ &lt;/a&gt;. Por esta razn SAP recomienda que siempre 
  que trabajemos con campos de tipo P marquemos el atributo ⚠ &lt;i&gt;Aritmtica en coma 
  fija⚠ &lt;/i&gt;. Cuando tenemos marcado este atributo, no slo tiene efecto con la 
  sentencia ⚠ &lt;a href="write.htm" tppabs="http://www.gaussr3.com/abap4/sentencias/write.htm"&gt;WRITE⚠ &lt;/a&gt;, sino que tambin toma relevancia en 
  las operaciones numricas. Los resultados intermedios se guardan con 31 posiciones 
  significativas antes y despus del punto decimal.</p>

<p class="gaussr3">Los tipos de datos fecha y hora no son tipo numricos pero

  se pueden realizar operaciones aritmticas se suele usar el offset de los campos.</p>

<p class="gaussr3">Existe una funcin que opera con los campos alfanumricos:</p>

<table border="0" width="100%">

  <tr> 
    <td width="17%" class="gaussr3">⚠ &lt;b&gt;Operador⚠ &lt;/b&gt;</td>
    <td width="41%" class="gaussr3">⚠ &lt;b&gt;Significado⚠ &lt;/b&gt;</td>
    <td width="42%" class="gaussr3">⚠ &lt;b&gt;Ejemplo⚠ &lt;/b&gt;</td>
  </tr>
  <tr> 
    <td width="17%" class="gaussr3">STRLEN</td>
    <td width="41%" class="gaussr3">Determina la longitud hasta el ltimo carcter 
      distinto del espacio en blanco.</td>
    <td width="42%" class="gaussr3">resultado = STRLEN(campo ).</td>
  </tr>

</table>

<p class="gaussr3">⚠ &lt;b&gt;Vease tambin: ⚠ &lt;/b&gt;⚠ &lt;a href="add.htm" tppabs="http://www.gaussr3.com/abap4/sentencias/add.htm"&gt;ADD⚠ &lt;/a&gt;, ⚠ &lt;a href="subtract.htm" tppabs="http://www.gaussr3.com/abap4/sentencias/subtract.htm"&gt;SUBTRACT⚠ &lt;/a&gt;,

  ⚠ &lt;a href="multiply.htm" tppabs="http://www.gaussr3.com/abap4/sentencias/multiply.htm"&gt;MULTIPLY⚠ &lt;/a&gt; y ⚠ &lt;a href="divide.htm" tppabs="http://www.gaussr3.com/abap4/sentencias/divide.htm"&gt;DIVIDE⚠ &lt;/a&gt;.</p>

<p> </p>

</body>

</html>