Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [PHP]Obliczanie znizki (formula)
Forum PHP.pl > Forum > Przedszkole
Furiapl
Witam serdecznie.
Od dwóch dni uczę się PHP z nadzieją, że kiedyś będę mógł się tym zajmować na co dzień, jednak czym dalej brnę tym bardziej sobie uświadamiam, że jest to dosyć trudne.
Szczególnie moje braki w matematyce dają się we znaki, no ale mniejsza - do sedna!
Uczę się ze znanej książki i mój dotychczasowy kod wygląda następująco:
  1. <html>
  2. <head>
  3. <title>Części samochodowe Janka oraz wyniki zamówienia</title>
  4. </head>
  5. <body>
  6. <h1>Części samochodowe Dominika</h1>
  7. <h2>Wyniki zamówienia</h2>
  8. <?php
  9.  
  10. echo '<p> Zamówienie przyjęte o ';
  11. echo date ('H: i jS F Y');
  12. echo '</p>';
  13.  
  14.  
  15. $iloscopon = $_POST['iloscopon'];
  16. $iloscoleju = $_POST['iloscoleju'];
  17. $iloscswiec = $_POST['iloscswiec'];
  18.  
  19.  
  20. echo '<p> Państwa zamówienie wygląda następująco: </p>';
  21.  
  22. $ilosc = 0;
  23.  
  24.  
  25.  
  26. $ilosc = $iloscopon + $iloscoleju + $iloscswiec;
  27.  
  28. if($ilosc == 0) {
  29. echo "Na poprzedniej stronie nie zostało złożone żadne zamówienie !<br /> ";
  30. } else {
  31. echo $iloscopon." opon<br />";
  32. echo $iloscoleju." butelek oleju<br /> ";
  33. echo $iloscswiec." świec zapłonowych<br /> ";
  34. }
  35.  
  36.  
  37.  
  38.  
  39. echo '<p> Liczba zamówionych części razem : ' .$ilosc;
  40. echo '</p>';
  41.  
  42.  
  43. $wartosc = 0.00;
  44.  
  45.  
  46. define('CENAOPON', 100);
  47. define('CENAOLEJU', 10);
  48. define('CENASWIEC', 4);
  49.  
  50. $wartosc = $iloscopon* CENAOPON
  51. +$iloscoleju * CENAOLEJU
  52. +$iloscswiec * CENASWIEC;
  53.  
  54.  
  55.  
  56.  
  57.  
  58. echo ' Cena netto wynosi : ' .number_format ($wartosc, 2). ' PLN <br />';
  59.  
  60.  
  61. $stawkavat = 0.23;
  62. $wartosc = $wartosc * (1+$stawkavat);
  63.  
  64. echo 'Cena brutto wynosi : ' .number_format($wartosc, 2). ' PLN </br />';
  65.  
  66.  
  67.  
  68. if( $iloscopon < 10 )
  69. $znizka = 0;
  70. elseif( $iloscopon >= 10 && $iloscopon <= 49 )
  71. $znizka = 5;
  72. elseif( $iloscopon >= 50 && $iloscopon <= 99 )
  73. $znizka = 10;
  74. elseif( $iloscopon > 100 )
  75. $znizka = 15;


Jak stworzyć formułę, która policzy zniżkę od opon?
Mam już warunek związany z tymi progami zamówienia, teraz mi chodzi o to by stworzyć formułę związaną z $zniżka (czy to ma być podobnie jak z $podatekvat?)
Z góry dziękuje serdecznie za pomoc i przepraszam za niechlujny kod, staram się pisać samemu, bez ksiązki.
tomxx
Ale ta zniżka ma dotyczyć łącznej ceny, czy tylko ceny opon? Jeżeli łącznej ceny, to wystarczy:
  1. $wartosc *= (1 - $znizka * 0.01);


Tak w ogóle, to zniżka jest procentowa, więc łatwiej i czytelniej byłoby ją zapisywać 0.15, 0.2 itd.
Furiapl
Czyli nie jest ze mną tak źle.
Początkowo właśnie zapisywałem w ten sposób w który mówisz, ale w książce było inaczej więc nie chciałem kombinować.
Zniżka ma dotyczyć tylko opon.
I tutaj się gubię bo nie wiem czy mam grzebać coś przy ogólnym wyniku czy przy formule związanej z liczeniem liczby opon.
Bo żeby to wyliczyć potrzebujemy liczbę opon * cena i od tego ten rabat.
(Jak wyżej widać rabat jest definiowany na podstawie liczby opon, którą klient zamawia więc nie może być chyba "sztywny".
Tylko jak to zapisać?
tomxx
To musisz zniżkę od opon odliczyć wcześniej, zanim jeszcze dodasz ceny do siebie.

Do linijki 49. wszystko jest dobrze, ale po linijce 49. musisz zrobić to tak:
  1. # Najpierw ustalamy wartość zniżki
  2. if( $iloscopon < 10 )
  3. $znizka = 0;
  4. elseif( $iloscopon >= 10 && $iloscopon <= 49 )
  5. $znizka = 5;
  6. elseif( $iloscopon >= 50 && $iloscopon <= 99 )
  7. $znizka = 10;
  8. elseif( $iloscopon > 100 )
  9. $znizka = 15;
  10.  
  11. # Potem obliczamy wartości artykułów:
  12. $opony = $iloscopon * CENAOPON;
  13. $olej = $iloscoleju * CENAOLEJU;
  14. $swiece = $iloscswiec * CENASWIEC;
  15.  
  16. # Odliczamy zniżkę:
  17. $opony *= (1 - $znizka * 0.01);
  18.  
  19. # I dopiero na końcu sumujemy i obliczamy łączną cenę i VAT
  20.  
  21. $wartosc = $opony + $olej + $swiece;
  22.  
  23. echo ' Cena netto wynosi : ' .number_format ($wartosc, 2). ' PLN <br />';
  24.  
  25.  
  26. $stawkavat = 0.23;
  27. $wartosc = $wartosc * (1+$stawkavat);
  28.  
  29. echo 'Cena brutto wynosi : ' .number_format($wartosc, 2). ' PLN </br />';
Furiapl
Dziękuję kolego, bardzo mi pomogłeś!
I tylko jedno błahe pytanie.
Dlaczego pomnożyłeś *0,01?
Pozdrawiam serdecznie.
tomxx
Bo w Twoim skrypcie zniżki są w liczbach całkowitych. W przeciwnym razie dla zniżki 15 mielibyśmy $opony *= -14, zamiast $opony *= 0,85.
Furiapl
Zatem jeżeli podam te wartości rabatu w takiej postaci :
0
0.05
0.10
0.15
To linijka z wartością może wyglądać tak?
  1. $opony *= (1 - $znizka );

Pozdrawiam!
tomxx
Tak.
Furiapl
Witam,
Mam jeszcze jedno błahe pytanie dotyczące łączonych operatorów przypisania.
Otóż, nie rozumiem na jakiej zasadzie one działają, mógłby ktoś łopatologicznie mi to wyjaśnić?
  1. while ($odleglosc <= 1000) {
  2. echo "<tr>
  3. <td align=\"right\">".$odleglosc."</td>
  4. <td align=\"right\">". ($odleglosc / 10) ."</td>
  5. </tr>\n";
  6.  
  7. $odleglosc += 50;

Prosta pętelka, jednak jak usunę tego "+" na końcu to wynik będzie taki sam, o co tutaj chodzi?
Podobny problem mam z tym operatorem " *= " chodzi o to, że najpierw coś wymnoży a później wynik poda?
Kompletnie tego nie rozumiem.
Za wszelkie rady będę bardzo wdzięczny.
Pozdrawiam.
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.