Jump to content
paikerr

OPERACION MATEMÁTICA

Recommended Posts

Hola a todxs,

 

Tengo un problemilla con la siguiente expresión matemática:

Sub MATHS_1()
  [A1] = 2 \ 3			 ' Igual a 0.
  [A2] = 2 \ 3 * 2		 ' Igual a 0.
  [A3] = 2 \ 3 * 2 / 3	 	' Igual a 1.
End Sub

El resultado de la celda [A3] si aplican la macro anterior, podrán comprobar que es 1.

Pues bien, no termino de entender muy bien la siguiente lógica:

> Paso 1: "2 \ 3" el resultado es 0, pues sólo se recoge la parte entera de la división. Es decir, si 2 / 3 = 0,666 (período), entonces 2 \ 3 = debería ser 0.

> Paso 2: Del resultado anterior, es decir del 0 obtenido, se lo multiplica por 2. Y cualquier número multiplicado por 0 es siempre 0.

> Paso 3: Y finalmente, el 0 obtenido hasta el momento se divide entre 3, es decir 0 / 3, y es cuando llegamos aquí en donde da como resultado final un 1.

Sin embargo, cualquier número que divida a 0 debería dar error. Y no es así en este ejemplo.

Lo cual me induce a pensar en la siguiente teoría: Creo que el operador "\" en realidad no recoge la parte entera, sino que recoge también la parte decimal y la aplica en las siguientes operaciones para evitar precisamente que den como resultado un error, pero en la celda sólo se muestra la parte entera de la división.

 

En este otro código (que es igual al anterior), tenemos que:

Sub MATHS_2()
  [A1] = 2 \ 3		' Igual a 0.
  [A2] = [A1] * 2	' Igual a 0.
  [A3] = [A2] / 3	' Igual a 0.
End Sub

Si aplicamos lo mismo que en el ejemplo anterior, pero esta vez recogemos el valor dentro de las celdas, podremos observar como en esta ocasión el resultado de la celda [A3] es igual a 0.


No sé... alguien que sepa de matemáticas y de operadores en Excel, quizás pueda enfocarme un poco.

Gracias de antemano por vuestro tiempo.

Share this post


Link to post
Share on other sites

Hola!

¿Que resultado esperas? ¿ya probaste manualmente o con calculadora?

Excel trabaja los numeros perfectamente, como cualquier calculadora, pero ojo, debes tener en cuanta el orden de ciertas reglas matematicas

En tu ejemplo, en ninguna parte, trabajas con enteros, Excel sigue tratando cada operación con los decimales correspondientes

Para poder obtener la parte entera, puedes utilizar Vba.Int

Si tienes mas dudas, pues comentas

 

Saludos 

Share this post


Link to post
Share on other sites

¡Hola, a ambos!

El operador "\" en VBA es el operador "División entera", el cual, como su nombre lo indica, devuelve la parte entera de una división, sin redondear.

El tema va más por el orden de las operaciones en VBA, la cual la puedes ver aquí:

https://docs.microsoft.com/es-es/dotnet/visual-basic/language-reference/operators/operator-precedence

Operaciones aritméticas y operadores de concatenación

  • Exponenciación (^)
  • Unario identidad y negación (+, –)
  • Multiplicación y división de coma flotante (*, /)
  • División de enteros (\)
  • Módulo aritmético (Mod)
  • Suma y resta (+, –)
  • Concatenación de cadenas (&)

Entonces, en el caso que expones, primero se resuelve la multiplicación y división normal, y luego, la división de enteros.

En ese orden de ideas:

[A3] = 2 \ 3 * 2 / 3
[A3] = 2 \ 6 / 3
[A3] = 2 \ 2
[A3] = 1

Que es el resultado correcto, tal y como lo comentas inicialmente.  La teoría expuesta al final es incorrecta.  ¡Bendiciones!

Share this post


Link to post
Share on other sites
Hace 3 horas, johnmpl dijo:

Operaciones aritméticas y operadores de concatenación

  • Exponenciación (^)
  • Unario identidad y negación (+, –)
  • Multiplicación y división de coma flotante (*, /)
  • División de enteros (\)
  • Módulo aritmético (Mod)
  • Suma y resta (+, –)
  • Concatenación de cadenas (&)

Gracias @johnmpl, efectivamente ahí es dónde estaba mi duda.
Me guardo este orden para tenerlo en cuenta frente a futuras operaciones.

 

Pensaba que la división de números enteros y la división en coma flotante tenían el mismo orden en la lista, de ahí mi duda... Al ver el orden del listado, todo cobra sentido.

Obviamente con el uso de paréntesis en las operaciones, todo se soluciona mucho más fácil, pero quería trabajar sin paréntesis precisamente por eso, para conocer el orden de los operadores.

 

Muchísimas gracias a todos por vuestra colaboración.

 

+++ TEMA CERRADO +++

Share this post


Link to post
Share on other sites
Guest
This topic is now closed to further replies.



×
×
  • Create New...

Important Information

Privacy Policy


CTA Templates.png