![]() |
![]() ![]() |
![]() |
![]()
Post
#1
|
|
Grupa: Zarejestrowani Postów: 82 Pomógł: 0 Dołączył: 12.08.2003 Skąd: Kalisz Ostrzeżenie: (0%) ![]() ![]() |
Witam
Robie skrypt do dodawania piłkarzy do skarbu kibica. Dodawanie juz skonczyłem, i przy wyświetlaniu chciałem zrobić taki bajer, ile dany piłkarz strzelil bramek w poszczególnych minutach. Przyjołem że poszczególne minuty to bedą między 1 a 15 min. między 16 a 30 min. między 31 a 45 min. między 46 a 60 min. między 61 a 75 min. między 76 a 90 min. np bramki między 1 a 15 min. 10% bramki między 16 a 30 min. 10% bramki między 31 a 45 min. 10% bramki między 46 a 60 min. 10% bramki między 61 a 75 min. 30% bramki między 76 a 90 min. 30% i teraz własnie się zaciłem jak zrobic takie cos, zeby to się wyświetlało w procentach. Tak wygląda kawałek kodu: Cytat [php:1:b2d0b2a694]<?php
$sql = mysql_query("SELECT * FROM pilkarze ORDER BY id_pilkarza"); while($row = mysql_fetch_array($sql)) { $id=$row['id']; // id $im=$row['im']; // imie i nazwisko $mecze=$row['mecze']; // ilosc meczy $minuty=$row['minuty']; // minuty na boisku $bramki1=$row['bramki1']; // bramki w sumie $trafienia1=$row['trafienia1']; // bramki między 1 a 15 min. $trafienia2=$row['trafienia2']; // bramki między 16 a 30 min. $trafienia3=$row['trafienia3']; // bramki między 31 a 45 min. $trafienia4=$row['trafienia4']; // bramki między 46 a 60 min. $trafienia5=$row['trafienia5']; // bramki między 61 a 75 min. $trafienia6=$row['trafienia6']; // bramki między 76 a 90 min. ?>[/php:1:b2d0b2a694] Chodzi mi o to zeby w sumie te % nie przekraczały 100%, tzn zeby 100% rozbiło sie na te poszczególne procenty |
|
|
![]()
Post
#2
|
|
![]() Grupa: Zarejestrowani Postów: 691 Pomógł: 0 Dołączył: 6.08.2003 Ostrzeżenie: (0%) ![]() ![]() |
Cytat [php:1:27c10e19bf]<?php
$sql = mysql_query("SELECT * FROM pilkarze ORDER BY id_pilkarza"); while($row = mysql_fetch_array($sql)) { $id=$row['id']; // id $im=$row['im']; // imie i nazwisko $mecze=$row['mecze']; // ilosc meczy $minuty=$row['minuty']; // minuty na boisku $bramki1=$row['bramki1']; // bramki w sumie $trafienia1=$row['trafienia1']; // bramki między 1 a 15 min. $trafienia2=$row['trafienia2']; // bramki między 16 a 30 min. $trafienia3=$row['trafienia3']; // bramki między 31 a 45 min. $trafienia4=$row['trafienia4']; // bramki między 46 a 60 min. $trafienia5=$row['trafienia5']; // bramki między 61 a 75 min. $trafienia6=$row['trafienia6']; // bramki między 76 a 90 min. ?>[/php:1:27c10e19bf] Chodzi mi o to zeby w sumie te % nie przekraczały 100%, tzn zeby 100% rozbiło sie na te poszczególne procenty Hmm, ten kod co tu podałeś tylko wyciąga już gotowe dane, a myślę, że sprawdzanie spójności powinno się odbywać na etapie wkładania ich do bazy. Spróbuj przy ustalaniu zawartości każdego z pól trafienia[1-6] zaokrąglić round()'em wartość procentową. Wtedy suma powinna dać 100%, bo round konsekwentnie w niektórych obetnie końcówkę a w niektórych doda do pełnego procenta. |
|
|
![]()
Post
#3
|
|
![]() Grupa: Zarejestrowani Postów: 560 Pomógł: 0 Dołączył: 15.07.2003 Skąd: Kwidzyn Ostrzeżenie: (0%) ![]() ![]() |
hmm ja bym zrobil tak:
zlczasz ilosc wszystkich bramek (powiedzmy ze jest ich wszystkich 8 ) teraz $procent=100/8; i wychodzi ile 1 bramka to jaki procent potem musisz obliczyc dal kazdego przedzialu czasowego ile procent bramek zostalo trafionych $wynik=$ilosc_bramek_w_przedziale_czasowy*$procent; czyli jezle w czasi 1-15 byla 1 bramka to $wynik=1*$procent; co powinno dac 12,5% jesli byly by powidzmy 3 bramki w danym okresie to procent by wynosil 37,5% |
|
|
![]()
Post
#4
|
|
Grupa: Zarejestrowani Postów: 82 Pomógł: 0 Dołączył: 12.08.2003 Skąd: Kalisz Ostrzeżenie: (0%) ![]() ![]() |
Nie wiem czy dobrze, ale dorobiłem takie cos:
[php:1:c5089b5f65]<?php $dodawanie= $trafienia1 + $trafienia2 + $trafienia3 + $trafienia4 + $trafienia5 + $trafienia6; $procent= 100/$dodawanie; $przedzial1 = $trafienia1 * $procent; $przedzial2 = $trafienia2 * $procent; $przedzial3 = $trafienia3 * $procent; $przedzial4 = $trafienia4 * $procent; $przedzial5 = $trafienia5 * $procent; $przedzial6 = $trafienia6 * $procent; ?>[/php:1:c5089b5f65] i juz jak by dobrze ale w sumie calosc procentow wynos 97, tylko wyniki wychodza takie: 15.254237288136 13.559322033898 11.864406779661 10.169491525424 15.254237288136 33.898305084746 może by przy wynikach zastosować funkcje [manual:c5089b5f65]round()[/manual:c5089b5f65] ? |
|
|
![]()
Post
#5
|
|
![]() Grupa: Zarejestrowani Postów: 560 Pomógł: 0 Dołączył: 15.07.2003 Skąd: Kwidzyn Ostrzeżenie: (0%) ![]() ![]() |
moza uzyc round() do zaokraglania alebo wordwrap() do obcinania np do 2 miejsc po przecinku
|
|
|
![]()
Post
#6
|
|
Grupa: Zarejestrowani Postów: 82 Pomógł: 0 Dołączył: 12.08.2003 Skąd: Kalisz Ostrzeżenie: (0%) ![]() ![]() |
Nadal cos nie tak, dlatego zamowilem sobie dzis ksiazke PHP4. Zaawansowane programowanie moze w niej znajde odpowiedz
![]() |
|
|
![]()
Post
#7
|
|
![]() Grupa: Zarejestrowani Postów: 560 Pomógł: 0 Dołączył: 15.07.2003 Skąd: Kwidzyn Ostrzeżenie: (0%) ![]() ![]() |
ksiazka to doby pomysl ale wordwrap() powinno dzialac (sam tak obcinam wyniki)
zrob tak: $wynik=10.1879990098; // zalozy ze jest to twoja liczba jaka uzyskalez z dzielenia $wynik=wordwrap(4, $wynik); // efektem tego powinna byc 10.1 nie jest to najlepsza metoda bo jesli wynik bedzi 8.8387432934 to wynikiem bedzie 8.83 czyli w jednym przypadku bedzie jedno miejsce po przecinku a w drugim 2 liczby po przecinku ale zna to latwo rozwiaza poprzez sprawdzenie czy liczba jest wieksza od 10 czyli: if ($wynik>10) $wynik=wordwrap(5, $wynik); else $wynik=wordwrap(4, $wynik); to powinno zalatwic sprawe i wynik wynik powonien byc zawsze obcinany do 2 miejsc po przecinku |
|
|
![]()
Post
#8
|
|
![]() Grupa: Zarejestrowani Postów: 223 Pomógł: 0 Dołączył: 22.03.2003 Ostrzeżenie: (0%) ![]() ![]() |
A ja bym to zrobił troszkę inaczej... a mianowicie:
1. Zsumował wszystko. 2. Obliczył procenty dla wszystkich czasów prócz ostatniego. 3. Zaokroąglił bez przecinków. 3. Zsumował wszystkie procenty 4. Jako wartość ostatniego czasu dał bym $wynik_ostatni_czas = 100 - $suma_procent. Dlaczego? Bo po zaokrągleniach może się nie zgadzać wynik - np. nie być równy 100%, ale np. 101%. |
|
|
![]()
Post
#9
|
|
![]() Grupa: Zarejestrowani Postów: 560 Pomógł: 0 Dołączył: 15.07.2003 Skąd: Kwidzyn Ostrzeżenie: (0%) ![]() ![]() |
do obcinania stringa czyli w twoim przypadku do zmniejszenia np do 2 miejsc po przecinku dobra jest funkcja substr()
np. $tekst=substr($tekst,0,4); czyli obcina string z $tekst zaczynajac od 0 do 4 moze to bedzie ci dzialac[/b] |
|
|
![]()
Post
#10
|
|
![]() Grupa: Przyjaciele php.pl Postów: 1 717 Pomógł: 0 Dołączył: 12.06.2002 Skąd: Wolsztyn..... Studia: Zielona Góra Ostrzeżenie: (0%) ![]() ![]() |
juz lepsze bedzie cos z tego:
[php:1:b25ab642c2] /* 1 */ $wynik = round($liczba,2); /* 2 */ $wynik = floor(100 * $liczba) / 100; /* 3 */ $wynik = sprintf("%.2f", $liczba); [/php:1:b25ab642c2] Uzycie wordwrap do zaokraglania lekko mnie rozbawilo przyznam ![]() |
|
|
![]()
Post
#11
|
|
![]() Grupa: Zarejestrowani Postów: 560 Pomógł: 0 Dołączył: 15.07.2003 Skąd: Kwidzyn Ostrzeżenie: (0%) ![]() ![]() |
wordwrap() pomylilo mi sie z substr()
a to i tak nie mialo sluzyc do zaokraglania tylko do obciecia! |
|
|
![]()
Post
#12
|
|
![]() Grupa: Przyjaciele php.pl Postów: 1 717 Pomógł: 0 Dołączył: 12.06.2002 Skąd: Wolsztyn..... Studia: Zielona Góra Ostrzeżenie: (0%) ![]() ![]() |
Drugi ze sposobow podanych przeze mnie tez tylko obcina, bez zaokraglania. substr jest malo uniwersalny, bo przy innym wymiarze liczby juz musial bys zmodyfikowac granice wycinania.
|
|
|
![]() ![]() |
![]() |
Wersja Lo-Fi | Aktualny czas: 5.08.2025 - 09:35 |