Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> [PHP]Division by zero, jak zablokować
morman
post
Post #1





Grupa: Zarejestrowani
Postów: 4
Pomógł: 0
Dołączył: 21.07.2008

Ostrzeżenie: (0%)
-----


Mam taki blok obliczeń:
  1.  
  2. $m=($a*$e*$i)+($d*$h*$c)+($g*$b*$f)-($g*$e*$c)-($a*$h*$f)-($d*$b*$i);
  3. $n=($j*$e*$i)+($d*$h*$l)+($g*$k*$f)-($g*$e*$l)-($j*$h*$f)-($d*$k*$i);
  4. $o=($a*$k*$i)+($j*$h*$c)+($g*$b*$l)-($g*$k*$c)-($a*$h*$l)-($j*$b*$i);
  5. $p=($a*$e*$l)+($d*$k*$c)+($j*$b*$f)-($j*$e*$c)-($a*$k*$f)-($d*$b*$l);
  6. $t=$m;
  7. $u=$n;
  8. $w=$o;
  9. $x=$p;
  10. $q=$u/$t;
  11. $r=$w/$t;
  12. $s=$x/$t;


I czasami gdy dochodzi do dzielenia przez zero wyskakuje mi błąd:
Kod
Warning: Division by zero in C:\Program Files\WebServ\httpd\Praca\obliczenia\wyznacznik.php on line 26

Co oczywiście się zgadza i dalsze obliczenia nie mają sensu dlatego aplikacja wyrzuca coś takiego:


Uploaded with ImageShack.us
I teraz pytanie co mam zrobić aby nie wyskakiwał mi ten błąd w wynikach?


--------------------
Każdą rewolucyjną ideę można podsumować trzema fazami - to niemożliwe, nie będę marnować czasu - to możliwe ale nie warte zachodu - mówiłem przez cały czas, że to był dobry pomysłPrawo Clarke'a
Go to the top of the page
+Quote Post
nospor
post
Post #2





Grupa: Moderatorzy
Postów: 36 557
Pomógł: 6315
Dołączył: 27.12.2004




No to zanim podzielisz przez jakąś zmienną to sprawdz najpierw czy ta zmienna nie jest przypadkiem zerem. Czego w tym nie rozumiesz?

Do sprawdzenia sluzy IF


--------------------

"Myśl, myśl, myśl..." - Kubuś Puchatek || "Manual, manual, manual..." - Kubuś Programista
"Szukaj, szukaj, szukaj..." - Kubuś Odkrywca || "Debuguj, debuguj, debuguj..." - Kubuś Developer

Go to the top of the page
+Quote Post
jareeny
post
Post #3





Grupa: Zarejestrowani
Postów: 226
Pomógł: 23
Dołączył: 2.10.2007
Skąd: Słupsk

Ostrzeżenie: (0%)
-----


poczytaj:

http://pl.php.net/manual/pl/errorfunc.conf...error-reporting


--------------------
banan wszyscy.
Go to the top of the page
+Quote Post
nospor
post
Post #4





Grupa: Moderatorzy
Postów: 36 557
Pomógł: 6315
Dołączył: 27.12.2004




@jareeny chyba nie sugerujesz by morman wyłączył poprostu wyswietlanie tych bledow?
jesli sugerujesz: morman nie sluchaj go bo to najgorsza rzecz jaką możesz zrobic. masz po prostu sprawdzac czy przypadkiem nie dzielisz przez 0 i jesli tak to odpowiednio zareagowac.


--------------------

"Myśl, myśl, myśl..." - Kubuś Puchatek || "Manual, manual, manual..." - Kubuś Programista
"Szukaj, szukaj, szukaj..." - Kubuś Odkrywca || "Debuguj, debuguj, debuguj..." - Kubuś Developer

Go to the top of the page
+Quote Post
teka
post
Post #5





Grupa: Zarejestrowani
Postów: 9
Pomógł: 2
Dołączył: 30.04.2010

Ostrzeżenie: (0%)
-----


zastanawia mnie dlaczego od razu nie przypiszesz tych wyliczeń do zmiennych $t, $u, $w, $x??
  1. $t=($a*$e*$i)+($d*$h*$c)+($g*$b*$f)-($g*$e*$c)-($a*$h*$f)-($d*$b*$i);
  2. $u=($j*$e*$i)+($d*$h*$l)+($g*$k*$f)-($g*$e*$l)-($j*$h*$f)-($d*$k*$i);
  3. $w=($a*$k*$i)+($j*$h*$c)+($g*$b*$l)-($g*$k*$c)-($a*$h*$l)-($j*$b*$i);
  4. $x=($a*$e*$l)+($d*$k*$c)+($j*$b*$f)-($j*$e*$c)-($a*$k*$f)-($d*$b*$l);

z Twojego przykładu wynika, że dzielisz tylko przez $t, najprościej sprawdzić czy jest ona różna od zera i wtedy dopiero wykonywać dzielenie np. tak
  1. if($t!=0) {
  2. $q=$u/$t;
  3. $r=$w/$t;
  4. $s=$x/$t;
  5. } else {
  6. echo 'Treść komunikatu gdy $t=0';
  7. }

Go to the top of the page
+Quote Post
jareeny
post
Post #6





Grupa: Zarejestrowani
Postów: 226
Pomógł: 23
Dołączył: 2.10.2007
Skąd: Słupsk

Ostrzeżenie: (0%)
-----


nosporku, ja bardzo dobrze wiem, że nie powinno się wyłączać wyświetlania błędów, ale on po prostu pyta jak ma zablokować te błędy, więc mu podaje przykładowe rozwiązanie.

oczywiście, najlepiej sprawdzać czy mianownik jest równy zero i wtedy reagowac...


--------------------
banan wszyscy.
Go to the top of the page
+Quote Post
nospor
post
Post #7





Grupa: Moderatorzy
Postów: 36 557
Pomógł: 6315
Dołączył: 27.12.2004




@jareeniczku kochany jak to dobrze ze całe forum nie kieruje się Twoją logiką.... smile.gif


--------------------

"Myśl, myśl, myśl..." - Kubuś Puchatek || "Manual, manual, manual..." - Kubuś Programista
"Szukaj, szukaj, szukaj..." - Kubuś Odkrywca || "Debuguj, debuguj, debuguj..." - Kubuś Developer

Go to the top of the page
+Quote Post

Reply to this topicStart new topic
1 Użytkowników czyta ten temat (1 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Aktualny czas: 19.08.2025 - 18:33