Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> [PHP]Dzielenie przez 0 w warunku if
aquarius1978
post 5.06.2012, 12:26:40
Post #1





Grupa: Zarejestrowani
Postów: 30
Pomógł: 0
Dołączył: 31.03.2012

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


Witam,

Poniżej przedstawiam fragment kodu, gdzie mam zapisane warunki, które działają poprawnie. Wyświetlają mi to czego oczekuję, ale jednocześnie
pojawiają mi się komunikaty o błędach:

Warning: Division by zero in D:\www\apache\htdocs\pkj10_wyniki.php on line 175

Warning: Division by zero in D:\www\apache\htdocs\pkj10_wyniki.php on line 180

Co oznacza komunikat to wiem. Problem polega na tym, że taka sytuacja może mieć miejsce w moich wyliczeniach i czasem wartość musi być podzielona przez 0
Jak to poprawić, by nie wyświetlało informacji o błędzie?

Fragment kodu:
  1. <?php
  2. if ( ( $row['pk_wyn'] * 100 ) / $row['wartosc_pk'] > 40 ){
  3. $pk_wyn = $row['pk_wyn'];
  4. $color4 = 'black';
  5. $obraz4 = 'images/st1a.jpg';
  6. }
  7. elseif ( ( $row['pk_wyn'] * 100 ) / $row['wartosc_pk'] == 0 ){
  8. $pk_wyn = $row['pk_wyn'];
  9. $color4 = 'blue';
  10. $obraz4 = 'images/st1a.jpg';
  11. }
  12.  
  13. elseif ( ( $row['pk_wyn'] * 100 ) / $row['wartosc_pk'] <= 40 ){
  14. $pk_wyn = $row['pk_wyn'];
  15. $color4 = 'red';
  16. $obraz4 = 'images/st2a.jpg';
  17. }
  18. ?>
Go to the top of the page
+Quote Post
nospor
post 5.06.2012, 12:28:41
Post #2





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




Cytat
i czasem wartość musi być podzielona przez 0

Ta reforma oświatowa jest poprostu straszna......Nawet tego wierszyka cię w szkole nie nauczyli
Pamiętaj cholero nie dziel przez zero
?
Nie wolno dzielic przez 0 i już. Zanim zaczniesz dzielic sprawdz czy to jest 0 czy nie i jak jest to 0 to poprostu nie dziel.


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

"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
aquarius1978
post 5.06.2012, 12:36:16
Post #3





Grupa: Zarejestrowani
Postów: 30
Pomógł: 0
Dołączył: 31.03.2012

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


Wiesz co, może trochę mniej złośliwości!!!!
Chyba wyraźnie napisałem, że czasem tak wychodzi i nie chodzi tu o znajomość zasad matematyki, bo je znam!!!
A nie będę Ci tłumaczył dlaczego tak musi być, że czasem będzie dzielone przez 0.

Zadałem proste pytanie:
jak to zrobić by nie wyświetlało mi komunikatu o błędzie?

Jak to sprawdzić czy jest 0?
Go to the top of the page
+Quote Post
nospor
post 5.06.2012, 12:38:33
Post #4





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




Cytat
że czasem tak wychodzi.....A nie będę Ci tłumaczył dlaczego tak musi być, że czasem będzie dzielone przez 0.
smile.gif Nie wolno dzielić przez 0 nawet czasem mój ty profesorze matematyki tongue.gif
jak sprawdzić? Normalnie? Nie umiesz IF użyć?
if ($cos == 0) echo 'nie dziele';
else echo 'dziele';

Proszę cię....


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

"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
ethann
post 5.06.2012, 12:41:37
Post #5





Grupa: Zarejestrowani
Postów: 56
Pomógł: 18
Dołączył: 7.04.2012

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


Poza tym dlaczego w każdym warunku wykonujesz to samo obliczenie? Wykonaj je raz i z głowy.
Zobrazowanie tego o czym pisał nospor.
  1. $wynik = 0;
  2. if($row['wartosc_pk'] != 0 && $row['pk_wyn'] != 0)
  3. $wynik = ( $row['pk_wyn'] * 100 ) / $row['wartosc_pk'];


i zamiast
  1. ( $row['pk_wyn'] * 100 ) / $row['wartosc_pk']

wpisuj w warunkach
  1. $wynik
Go to the top of the page
+Quote Post
Age1869
post 5.06.2012, 12:44:36
Post #6





Grupa: Zarejestrowani
Postów: 118
Pomógł: 6
Dołączył: 25.10.2010
Skąd: Radzyn Podlaski

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


Komputery, informatyka, programowanie są oparte na matematyce, więc ich podstawą są zasady matematyki.

Nie zabieraj się za programowanie jeżeli dopuszczasz warunkowe dzielenie przez 0.

Jest pewien matematyczny problem: zero do każdej potęgi to zero, ale każda liczba do zerowej potęgi to jeden. Ile to jest zatem zero do potęgi zero. Nie da się tego rozwiązać stosując klasyczną definicję zera (zero czyli nic). Trzeba przyjąć, że zero to tak w zasadzie liczba skrajnie mała, dążąca do zera. W tym wypadku dzielenie przez 0 byłoby możliwe, ale trzeba to zapisać if ($cos == 0) { $wynik = 'nieskonczonosc' } tutaj jeszcze kwestia znaku tego zera dochodzi.


--------------------
Michal Zarobkiewicz Photographic Gallery
Go to the top of the page
+Quote Post
aquarius1978
post 5.06.2012, 12:45:27
Post #7





Grupa: Zarejestrowani
Postów: 30
Pomógł: 0
Dołączył: 31.03.2012

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


Ale tłumacze Ci, że musi się to dzielenie odbyć może na prostym przykładzie Ci zademonstruję

wartoscA wartoscB wartoscC
4 8 13
0 0 5
6 5 11

Takie wyniki zostają prowadzone do bazy i wg mojego if wartoscC dzielimy na wartoscB i czasem jest 0. ( opis w wielkim skrócie)
Nie chodzi więc by nie dzielić, ale by to zrobić tak by nie wyświetlało błędu.
Go to the top of the page
+Quote Post
nospor
post 5.06.2012, 12:47:49
Post #8





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




@ethann akurat licznik może być równy 0 więc nie:
if($row['wartosc_pk'] != 0 && $row['pk_wyn'] != 0)
a:
if($row['wartosc_pk'] != 0)

Nie popadajmy w skrajnośći wink.gif

Cytat
Nie chodzi więc by nie dzielić, ale by to zrobić tak by nie wyświetlało błędu.
Ty w ogole nie czytasz co się do ciebie pisze.... Przecież masz to już napisane w 3 postach!


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

"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
aquarius1978
post 5.06.2012, 12:48:31
Post #9





Grupa: Zarejestrowani
Postów: 30
Pomógł: 0
Dołączył: 31.03.2012

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


Cytat(ethann @ 5.06.2012, 13:41:37 ) *
Poza tym dlaczego w każdym warunku wykonujesz to samo obliczenie? Wykonaj je raz i z głowy.
Zobrazowanie tego o czym pisał nospor.
  1. $wynik = 0;
  2. if($row['wartosc_pk'] != 0 && $row['pk_wyn'] != 0)
  3. $wynik = ( $row['pk_wyn'] * 100 ) / $row['wartosc_pk'];


i zamiast
  1. ( $row['pk_wyn'] * 100 ) / $row['wartosc_pk']

wpisuj w warunkach
  1. $wynik



Ale tam sa różne kolory wyświetlania i ikonki przy wynikach w zależności od tego jaki wynik wychodzi.
Dlatego rozbiłem to na 3
Go to the top of the page
+Quote Post
ethann
post 5.06.2012, 12:52:28
Post #10





Grupa: Zarejestrowani
Postów: 56
Pomógł: 18
Dołączył: 7.04.2012

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


@nospor
zgadzam się, ale po co ma wykonywać obliczenia, skoro i tak wynikiem będzie 0 przy liczniku równym 0 wink.gif
Go to the top of the page
+Quote Post
rocktech.pl
post 5.06.2012, 12:54:10
Post #11





Grupa: Zarejestrowani
Postów: 587
Pomógł: 131
Dołączył: 8.02.2010

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


Witam.

Cytat
Jak to poprawić, by nie wyświetlało informacji o błędzie?


Spróbuj tak smile.gif

  1. var_dump( @(10 / 0) );


--------------------
Despite the tons of examples and docs, mod_rewrite is voodoo. Damned cool voodoo, but still voodoo. --Brian Moore

I never go looking for a sucker. I look for a Champion and make a sucker of of him. --Amarillo Slim


Home-made : js-gui-classes | Accordion | Tabs | Carousel / php-sms-classes | Obsługa bramki SMS MultiInfo | Obsługa bramki SMS Mobiltek
Go to the top of the page
+Quote Post
nospor
post 5.06.2012, 12:54:53
Post #12





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




Cytat
ale po co ma wykonywać obliczenia, skoro i tak wynikiem będzie 0 przy liczniku równym 0
Ja to wiem i ty to wiesz, ale po co mu komplikować bardziej ten "strasznie złożony" kod? Tego nie potrafi zrozumieć to po co mu jeszcze dowalać dodatkowe warunki? I mówię to bez złośliwości aquarius1978. Przetraw co tu ci napisano a nie strzelasz posty jeden za drugim bez żadnego zastanowienia. To są podstawy.

@rocktech.pl no za takie wskazówki to normalnie ban się nalezy....
Powód edycji: [nospor]:


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

"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
aquarius1978
post 5.06.2012, 12:55:52
Post #13





Grupa: Zarejestrowani
Postów: 30
Pomógł: 0
Dołączył: 31.03.2012

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


Ludzie normalnie można przez Was oszaleć.

Tworząc post podałem kod który posiadam i proszę tylko o pomoc jak to zrobić, w którym miejscy to wstawić by poprawnie działało.

A Wy ciągle dyskusja na temat 0, że się nie dzieli itp.

Niech ktoś poprawi mój kod tak by tego błędu nie było i to wszystko.

O nic więcej nie proszę.
Go to the top of the page
+Quote Post
ethann
post 5.06.2012, 12:58:30
Post #14





Grupa: Zarejestrowani
Postów: 56
Pomógł: 18
Dołączył: 7.04.2012

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


Cytat(aquarius1978 @ 5.06.2012, 13:48:31 ) *
Ale tam sa różne kolory wyświetlania i ikonki przy wynikach w zależności od tego jaki wynik wychodzi.
Dlatego rozbiłem to na 3


Rozumiem, ale po co 3x to samo działanie matematyczne? Procesor wykonuje 3 obliczenia, zamiast jednego. Dlatego najpierw oblicz, a później użyj w warunku.
  1. <?php
  2. $wynik = 0;
  3. if($row['wartosc_pk'] != 0)
  4. $wynik = ( $row['pk_wyn'] * 100 ) / $row['wartosc_pk'];
  5.  
  6. if ( $wynik > 40 ){
  7. $pk_wyn = $row['pk_wyn'];
  8. $color4 = 'black';
  9. $obraz4 = 'images/st1a.jpg';
  10. }
  11. elseif ( $wynik == 0 ){
  12. $pk_wyn = $row['pk_wyn'];
  13. $color4 = 'blue';
  14. $obraz4 = 'images/st1a.jpg';
  15. }
  16.  
  17. elseif ( $wynik <= 40 ){
  18. $pk_wyn = $row['pk_wyn'];
  19. $color4 = 'red';
  20. $obraz4 = 'images/st2a.jpg';
  21. }
  22. ?>
Go to the top of the page
+Quote Post
aquarius1978
post 5.06.2012, 13:00:54
Post #15





Grupa: Zarejestrowani
Postów: 30
Pomógł: 0
Dołączył: 31.03.2012

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


Cytat(nospor @ 5.06.2012, 13:54:53 ) *
Ja to wiem i ty to wiesz, ale po co mu komplikować bardziej ten "strasznie złożony" kod? Tego nie potrafi zrozumieć to po co mu jeszcze dowalać dodatkowe warunki? I mówię to bez złośliwości aquarius1978. Przetraw co tu ci napisano a nie strzelasz posty jeden za drugim bez żadnego zastanowienia. To są podstawy.

Dlatego właśnie piszę o pomoc, gdybym sam wiedział jak to zrobić to bym nie prosił. Wiesz nie każdy jest taki obeznany jak Ty. I nie strzelam postów. Ja zadałem konkretne pytanie, a nie otrzymałem konkretnej odpowiedzi tylko ...
Go to the top of the page
+Quote Post
nospor
post 5.06.2012, 13:01:49
Post #16





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




Cytat
a nie otrzymałem konkretnej odpowiedzi tylko ...
Konkretnych odpowiedzi dostałeś masę. Ale ty oczekujesz aż ktoś zrobi wszystko co do joty za ciebie. Zero wkładu własnego....


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

"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
aquarius1978
post 5.06.2012, 13:03:50
Post #17





Grupa: Zarejestrowani
Postów: 30
Pomógł: 0
Dołączył: 31.03.2012

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


Oto właśnie mi ethann chodziło, przynajmniej jedna konkretna osoba.

Działa. Dziękuję. Temat do zamknięcia.

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 Wersja Lo-Fi Aktualny czas: 24.07.2025 - 19:09