Fórmula para delta entre dos números

9

Estoy tratando de encontrar el delta entre dos conjuntos de números. Algunos números son positivos, algunos negativos.

Usar la siguiente fórmula funciona aproximadamente el 99% del tiempo:

=IF(I18<0,I18+R18,IF(I18>0,I18-R18))

Sin embargo, cuando I18y R18son números negativos, lo necesito I18-R18. He intentado varias IF ANDdeclaraciones, pero parece que no puedo hacerlo bien. Espero que alguien pueda guiarme en la dirección correcta.

Dave
fuente
3
Olvidó decir lo que debería pasar si I18es cero.
Blackwood
3
"cuando I18y R18son números negativos, necesito I18-R18" ¿Estás seguro de que quieres decir esto? Pensé que querías el delta como una diferencia absoluta. Si I18es -2y R18es -1, su resultado será -1. ¿No quieres un número positivo en todos los casos?
JoL
¿ =ABS(I18)-ABS(R18)Produce la salida deseada?
Salman A
3
Tu pregunta no está clara. Solo pude entender lo que buscabas cuando vi la respuesta (y todavía no estoy seguro de que sea lo que quieres). Además, un delta entre A y B solo puede ser A+Bsi A y B son cero.
Dmitry Grigoryev
3
El delta generalmente significa la diferencia entre dos números, que siempre es A-B , y a menos que desee indicar cuál de los números es el mayor, tomaría el valor absoluto abs (AB) .
Mick

Respuestas:

55

¿Parece que solo quieres la diferencia (delta) entre I18y R18, y quieres que siempre sea positiva?

Esta fórmula hará eso:

=ABS(I18-R18)

Le dará la respuesta correcta si I18es positivo, negativo o cero.

Steve Kennedy
fuente
3
¡Mira lo complicadas que son las otras respuestas! ¡Mantenlo simple!
Stewart
11
Para ser justos, la pregunta preguntaba cómo hacer que los anidados IF()funcionen correctamente. Las otras respuestas respondieron a la pregunta que se hizo. Pero a veces, tomar un camino diferente te llevará al lugar correcto más rápido.
Steve Kennedy
@Stewart Para ser más justos, no está claro si OP quiere la diferencia absoluta. Las respuestas de ToddCurry y PeterH buscan cumplir una condición del conjunto OP que no conduce a la diferencia absoluta.
JoL
@Stewart, la mayoría de las otras respuestas son básicamente las mismas que esta, excepto que desarrollan la función ABS () en bloques condicionales más básicos. Pero nada complicado, de verdad.
cedbeu
1
@cedbeu Complicado, definitivamente. Aunque solo sea porque las otras respuestas son más difíciles de leer y analizar, mentalmente.
Stewart
6

En lugar de verificar la negatividad de los operandos, verifique el resultado.

=IF(I18-R18>0,I18-R18,R18-I18)
JoL
fuente
3
la condición también podría ser reemplazada porI18>R18
Liora Haydont
5

Simplifiquemos su código original:

If X < 0:
    Z = X + Y

Else X > 0:
    Z = X - Y

Ahora dice que cuando X <0 e Y <0, en realidad desea que el resultado sea X - Y y no X + Y. OK.

If Y < 0:
   If X < 0:
      Z = X - Y
   Else:
      Z = X + Y
Else:
   If X < 0:
      Z = X - Y
   Else:
      Z = X + Y

Eso esta escrito.

=IF(R18<0,IF(I18<0,I18-R18,I18+R18),IF(I18<0,I18-R18,I18+R18))

Como se señaló anteriormente, no tiene un caso cero. Es posible que pueda cambiar uno de los comparadores LT / GT a LE / GE simplemente agregando un signo igual, dependiendo de sus datos y lógica.

Todd Curry
fuente
A menos que esté leyendo mal algo, en el pseudocódigo más grande que tiene If Y<0 {A} Else {B}pero A y B son idénticos. ¿Hay un error tipográfico?
Kamil Drakari
3

Puedes usar lo siguiente:

=IF(AND(I18<0,R18<0),I18-R18,IF(I18<0,I18+R18,IF(I18>0,I18-R18)))

El único defecto que puedo ver con esto es, ¿qué haces en una instancia en la I18 = 0que no tienes nada configurado para esto?

De todos modos, si desea agregar algo para esa instancia, consulte a continuación:

=IF(AND(I18<0,R18<0),I18-R18,IF(I18<0,I18+R18,IF(I18>0,I18-R18,"IF I18 = zero goes here")))
PeterH
fuente
1

No sabía sobre ABS. Iba a sugerir

= SQRT ((I18-R18) ^ 2)

Jinja
fuente
2
Teniendo en cuenta que el cálculo de las raíces cuadradas no es trivial y es propenso a errores de redondeo, eso es menos que óptimo.
David Foerster
0

Esto funcionó para mí -> IF (AND (I18 <0, R18 <0), I18-R18, IF (I18 <0, ((R18-I18) * - 1), IF (I18> = 0, I18-R18 )))

Esto cubre todos los escenarios: Variable A | Variable B + ve | + ve + ve | -ve -ve | + ve -ve | -ve

usuario1001108
fuente
(1) La tabla de las cuatro (2²) combinaciones posibles de dos variables binarias ( + /  -) es trivial, y mostrarla no hace nada para aclarar su respuesta. Si va a publicar una respuesta a una pregunta tan poco clara como esta, es útil explicar qué pregunta cree que está respondiendo. (2) Sea lo que sea que esté haciendo, su fórmula parece innecesariamente compleja. Explicar lo que está haciendo sería útil. ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... por favor no responda en los comentarios; edite  su respuesta para que sea más clara y completa.
Scott
0

Acabo de encontrarme con una situación (medición de lecturas de laboratorio de color) en la que no necesito simplemente la diferencia entre x e y sino el movimiento delta positivo o negativo. Entonces, normalmente -5 menos -2 = -3, pero querer mostrar que el delta estaba realmente en la dirección positiva -3 no es lo que estoy buscando, así que:

= SI (A1> B1, ABS (A1-B1) * - 1, ABS (A1-B1))

En pocas palabras, si la segunda lectura (más nueva) es más pequeña, sé que el resultado es un movimiento negativo (por lo tanto, * -1) y se ha movido más abajo en el lado negativo del eje. De lo contrario, si la segunda lectura es mayor, el valor ABS puro funciona sabiendo que la diferencia está en la dirección positiva.

Thomas Muchard
fuente