Wzór na różnicę między dwiema liczbami


9

Próbuję znaleźć różnicę między dwoma zestawami liczb. Niektóre liczby są dodatnie, niektóre ujemne.

Zastosowanie następującej formuły działa przez około 99% czasu:

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

Jednak kiedy I18i R18są liczbami ujemnymi, potrzebuję I18-R18. Próbowałem wielu IF ANDstwierdzeń, ale wydaje się, że nie mogę tego zrobić poprawnie. Mam nadzieję, że ktoś poprowadzi mnie we właściwym kierunku.


3
Zapomniałeś powiedzieć, co powinno się stać, jeśli I18zero.
Blackwood

3
„Kiedy I18i kiedy R18liczby ujemne, potrzebuję I18-R18” Czy na pewno masz na myśli to? Myślałem, że chcesz delty jako absolutnej różnicy. Jeśli I18jest -2i R18jest -1, twój wynik będzie -1. Nie chcesz liczby dodatniej we wszystkich przypadkach?
JoL

Czy =ABS(I18)-ABS(R18)wytwarza pożądaną wydajność?
Salman A,

3
Twoje pytanie jest naprawdę niejasne. Mogę tylko zrozumieć, co było potem, kiedy zobaczyłem odpowiedź (a ja wciąż nie jestem pewien, że to, co ty chcesz). Ponadto delta między A i B może być tylko A+Bwtedy, gdy zarówno A, jak i B są równe zero.
Dmitrij Grigoryev,

3
Delta zwykle oznacza różnicę między dwoma numerami, co jest zawsze AB , a jeśli nie chce oznacza która z liczb jest większa, to można przyjąć wartość bezwzględną abs (AB) .
Mick

Odpowiedzi:


55

Wygląda na to, że chcesz tylko różnicę (delta) między I18i R18chcesz, aby zawsze była pozytywna?

Ta formuła zrobi to:

=ABS(I18-R18)

Daje właściwą odpowiedź, czy I18jest pozytywna, negatywna czy zerowa.


3
Zobacz, jak skomplikowane są inne odpowiedzi! Nie komplikuj!
Stewart,

11
Aby być uczciwym, pytanie brzmiało, jak sprawić, by zagnieżdżenie IF()działało poprawnie. Pozostałe odpowiedzi dotyczyły zadanego pytania. Ale czasami obranie innej ścieżki szybciej doprowadzi Cię do właściwego miejsca.
Steve Kennedy

@Stewart Aby być bardziej sprawiedliwym, nie jest jasne, czy OP chce absolutnej różnicy. Odpowiedzi ToddCurry i PeterH wyglądają na spełnienie warunku zestawu OP, który nie prowadzi do absolutnej różnicy.
JoL

@Stewart, większość innych odpowiedzi jest w zasadzie taka sama jak ta, poza tym, że rozwijają one funkcję ABS () w bardziej podstawowych blokach warunkowych. Ale tak naprawdę nic skomplikowanego.
cedbeu

1
@cedbeu Skomplikowane, zdecydowanie. Choćby dlatego, że inne odpowiedzi są trudniejsze do odczytania i przeanalizowania, mentalnie.
Stewart,

6

Zamiast sprawdzać argumenty pod kątem negatywności, sprawdź wynik.

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

3
warunek ten można również zastąpićI18>R18
Liora Haydont

5

Uprośćmy twój oryginalny kod:

If X < 0:
    Z = X + Y

Else X > 0:
    Z = X - Y

Teraz mówisz, że gdy X <0 i Y <0, faktycznie chcesz, aby wynik był X - Y, a nie 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

To jest napisane.

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

Jak wspomniano powyżej, nie masz zerowego przypadku. Możesz być w stanie zmienić jeden z komparatorów LT / GT na LE / GE, po prostu dodając znak równości - w zależności od danych i logiki.


Chyba że coś źle odczytam, w większym pseudokodzie masz, If Y<0 {A} Else {B}ale A i B są identyczne. Czy jest literówka?
Kamil Drakari,

3

Możesz skorzystać z poniższych:

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

Jedyną wadą, jaką widzę przy tym, jest to, co robisz w przypadku I18 = 0, gdy nie masz na to nic ustawionego.

W każdym razie, jeśli chcesz dodać coś do tego wystąpienia, zobacz poniżej:

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

1

Nie wiedziałem o ABS. Miałem zamiar zasugerować

= SQRT ((I18-R18) ^ 2)


2
Biorąc pod uwagę, że obliczanie pierwiastków kwadratowych jest nietrywialne i podatne na błędy zaokrąglania, jest to mniej niż optymalne.
David Foerster,

0

To zadziałało dla mnie -> JEŻELI (I (I18 <0, R18 <0), I18-R18, JEŻELI (I18 <0, ((R18-I18) * - 1), JEŻELI (I18> = 0, I18-R18 )))

Dotyczy to wszystkich scenariuszy: Zmienna A | Zmienna B + ve | + ve + ve | -ve -ve | + ve -ve | -ve


(1) Tabela czterech (2²) możliwych kombinacji dwóch zmiennych binarnych ( + /  -) jest trywialna i pokazanie, że nic nie wyjaśnia odpowiedzi. Jeśli zamierzasz opublikować odpowiedź na pytanie tak niejasne jak to, przydatne jest wyjaśnienie, na jakie pytanie odpowiadasz. (2) Cokolwiek robisz, formuła wydaje się niepotrzebnie złożona. Pomocne byłoby wyjaśnienie, co robi. ……………………………………………… Proszę nie odpowiadać w komentarzach; edytuj  swoją odpowiedź, aby była jaśniejsza i bardziej kompletna.
Scott

0

Właśnie natknąłem się na sytuację (mierzenie odczytów Lab w kolorze), w której nie potrzebuję po prostu różnicy między x i y, ale dodatnim lub ujemnym ruchem delta. Więc normalnie -5 minus -2 = -3, ale chęć pokazania, że ​​delta faktycznie była w kierunku dodatnim -3, nie jest tym, czego szukam, więc:

= JEŻELI (A1> B1, ABS (A1-B1) * - 1, ABS (A1-B1))

Mówiąc najprościej, jeśli drugi (nowszy) odczyt jest mniejszy, wiem, że wynikiem jest ruch ujemny (więc * -1) i przesunęłem się dalej w dół ujemnej strony osi. W przeciwnym razie, jeśli drugi odczyt jest większy, czysta wartość ABS działa, wiedząc, że różnica jest w kierunku dodatnim.

Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.