Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [PHP]Dzielenie przez 0 w warunku if
Forum PHP.pl > Forum > Przedszkole
aquarius1978
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. ?>
nospor
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.
aquarius1978
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?
nospor
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ę....
ethann
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
Age1869
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.
aquarius1978
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.
nospor
@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!
aquarius1978
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
ethann
@nospor
zgadzam się, ale po co ma wykonywać obliczenia, skoro i tak wynikiem będzie 0 przy liczniku równym 0 wink.gif
rocktech.pl
Witam.

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


Spróbuj tak smile.gif

  1. var_dump( @(10 / 0) );
nospor
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....
aquarius1978
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ę.
ethann
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. ?>
aquarius1978
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 ...
nospor
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....
aquarius1978
Oto właśnie mi ethann chodziło, przynajmniej jedna konkretna osoba.

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

To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę kliknij tutaj.
Invision Power Board © 2001-2025 Invision Power Services, Inc.