Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [PHP]Działania matematyczne w PHP
Forum PHP.pl > Forum > Przedszkole
david8213
Zrobiłem liczydło które po po wybraniu z listy procentów przelicza mi na netto brutto oraz upust lub dodatek w procentach.

Jak zrobić że gdy jest wybrane zero w liście rozwijanej żeby mi nie liczył bo jak wiadomo mnożenie przez zero wszsytko wyjdzie źle czyli zero

  1. <?
  2.  
  3. $plik = 'data.txt';
  4.  
  5. if (file_exists($plik)) include($plik);
  6.  
  7. ?>
  8.  
  9.  
  10. <form action="" method="post">
  11. <input type="submit" value="Wybierz rabat">
  12. <select id="rabat" name="rabat">
  13. <option value='0'>0</option>
  14. <option value='1.1'>10</option>
  15. <option value='1.2'>20</option>
  16. <option value='1.3'>30</option>
  17. </select>
  18. </form>
  19.  
  20. <?
  21. (isset($_POST['rabat'])) ? $rabat=$_POST['rabat'] : $rabat=' 0 ';
  22. $rabat2=(($rabat-1)*100);
  23. echo ("Wybrałes rabat ".$rabat2." %");
  24. ?>
  25.  
  26. <br><br><br>
  27.  
  28.  
  29.  
  30. <?
  31. echo 'Cena bez rabatu: '. $pu200s4m.'zł netto<br>
  32. Cena bez rabatu: '.($pu200s4m*$vat).'zł brutto<br><br>
  33. Cena po dodaniu: '.$rabat2.'% : '.($pu200s4m*$rabat).'zł netto<br>
  34. Cena po dodaniu: '.$rabat2.'% : '.($pu200s4m*$rabat)*$vat.'zł brutto<br><br>
  35. Cena po rabacie: '.$rabat2.'% : '.(((($rabat2/100)*$pu200s4m)-$pu200s4m)*-1).'zł netto<br>
  36. Cena po rabacie: '.$rabat2.'% : '.(((($rabat2/100)*$pu200s4m)-$pu200s4m)*-$vat).'zł brutto<br>
  37. ';
  38. ?>


  1. <? Plik data.txt
  2. $vat="1.23";
  3. $pu200s4m="43";
  4. ......
  5. ....
  6. ....
  7. ...
  8. ?>
trueblue
W Twoim przypadku rabat będzie mieć wartość -100%, bo (0-1)*100. Nie możesz ustawić tam wartości 1, aby uzyskać rabat 0%?
A jeśli nie, to jest taka magiczna funkcja: http://php.net/manual/en/function.empty.php
david8213
jak zrobić żeby wynik działania nie wyświetlało mi z 4 miejscami po przecinku tylko 2
trueblue
Użyć funkcji round.
david8213
  1. <?
  2. echo 'Cena bez rabatu: '. $pu200s4m.'zł netto<br>
  3. Cena bez rabatu: '.($pu200s4m*$vat).'zł brutto<br><br>
  4. Cena po dodaniu: '.$rabat2.'% : '.($pu200s4m*$rabat).'zł netto<br>
  5. Cena po dodaniu: '.$rabat2.'% : '.($pu200s4m*$rabat)*$vat.'zł brutto<br><br>
  6. Cena po rabacie: '.$rabat2.'% : '.(((($rabat2/100)*$pu200s4m)-$pu200s4m)*-1).'zł netto<br>
  7. Cena po rabacie: round('.$rabat2.'% : '.(((($rabat2/100)*$pu200s4m)-$pu200s4m)*-$vat), 2).'zł brutto<br>
  8.  
  9.  
  10.  
  11. ';
  12. ?>


co jest nie tak że mi nie wyświetla ?
trueblue
Czego nie wyświetla? Chcesz zaokrąglić ostatnią kwotę czy chcesz wyświetlić tekst: Cena po rabacie: round(?
david8213
  1. <? echo round((((($rabat2/100)*$pu200s4m)-$pu200s4m)*-$vat), 2); ?>


OK . Dziękuję, Działa

Dlaczego zaokrągla mi liczbę po przecinku ?
trueblue
Bo to funkcja zaokrąglająca. Chcesz tylko obciąć cyfry?
david8213
chciałem obciąć tylko cyfry do 2 miejsc po przecinku
trueblue
  1. $liczba = intval($liczba * 100) / 100;
david8213
Jak ustawić początkową wartość zmiennej aby wczytywała się przy każdym otwarciu strony

Chodzi mi o to żeby $rabat przy otwarciu strony wynosił np 5

  1. <?
  2.  
  3. $rabat=5; <--- tak nie działa Nadal przy otwarciu jest zero
  4.  
  5. $plik = 'data.txt';
  6.  
  7.  
  8. if (file_exists($plik)) include($plik);
  9.  
  10. ?>
  11.  
  12.  
  13. <form action="" method="post">
  14. <input type="submit" value="Wybierz rabat" name="execute">
  15. <select id="rabat" name="rabat">
  16. <option value='1.05'>5</option>
  17. <option value='1.1'>10</option>
  18. <option value='1.2'>20</option>
  19. <option value='1.3'>30</option>
  20. </select>
  21. </form>
  22. <br>
  23. <?
  24. (isset($_POST['rabat'])) ? $rabat=$_POST['rabat'] : $rabat=' 0 ';
  25. $rabat2=(($rabat-1)*100);
  26. if (isset($_POST['execute'])) { echo ("Wybrałes rabat ".$rabat2." %"); }
  27. ?>
  28. <?
Tomplus
Stwórz sobie jaką małą funkcje np.

  1. function zmienWartosc($kwota, $wartoscRabatu) :float
  2. {
  3. $rabat = $kwota * (1 + $wartoscRabatu/100);
  4. return round($rabat * 100) /100;
  5. }
  6.  
  7. zmienWartosc(1000, 23),
  8. zmienWartosc(1000, -15)
  9. );


Wtedy tak jak u Ciebie:

  1. //gdzie $vat jest (int) a nie (float)
  2. $liczba - zmienWartosc(zmienWartosc($pu200s4m, $rabat2),$vat)
  3. echo 'Cena bez rabatu: '. $pu200s4m.'zł netto<br>
  4. Cena bez rabatu: '.zmienWartosc($pu200s4m, $vat).'zł brutto<br><br>
  5. Cena po dodaniu: '.$rabat2.'% : '.zmienWartosc($pu200s4m, - $rabat).'zł netto<br>
  6. Cena po dodaniu: '.$rabat2.'% : '.zmienWartosc(zmienWartosc($pu200s4m, - $rabat),$vat).'zł brutto<br>';



Nie rozumiem tej struktury:
[ [(rabat/100) * CENA] - CENA ] * ( - VAT)
david8213
OK a dlaczego nie działa mi podstawienie do zmiennej $rabat cyfry 5 przy ladowaniu strony ?
trueblue
Tomplus,
ta formuła ma za zadanie obcinać do dwóch miejsc po przecinku?
  1. round($rabat * 100) /100;

david8213
To obcina do 2 miejsc po przecinku

  1. <? $liczba=(((($rabat2/100)*$pu200s4m)-$pu200s4m)*-$vat);
  2. $liczba=intval($liczba *100)/100;
  3. echo $liczba;
  4. ?>



Co zle tu zrobiłem
Ma być warunek że jeśli zmienna rabat jest =0 wyświetli zmienną $pu200s4m a jeśli jest inna niż zero wyświetli $pu200s5m

  1. <?php if $rabat=0 {
  2. echo $pu200s4m;
  3. }
  4. else {
  5. echo $pu200s5m;
  6. }
  7. ?>
trueblue
Dzięki za wyjaśnienie...

Warunek powinien być ujęty w nawiasy. I nie tak się porównuje wartości w PHP.
david8213
  1.  
  2. <?php
  3. if($rabat==0)
  4. {
  5. echo $pu200s4m;
  6. }
  7. else
  8. {
  9. echo $pu200s5m;
  10. }


Dalej błąd :/
trueblue
To możesz zdradzisz jaki, czy wróżka Salmonella nam powie?
david8213
już znalazłem.Brakowało ?> Jak bedę czegoś potrzebował to się zgłoszę. Dziękuję

Domyślnie po wyborze pokazuje zawsze pierwszą pozycję? Chiałbym aby na liście zapamiętany był ostatni wybór


Zrobiłem jak poniżej ale nie działa


  1. <?
  2. function checkSelected($fieldValue, $rabat) {
  3. if ($_SERVER['REQUEST_METHOD'] == 'POST') {
  4. if ($fieldValue == $_POST[$rabat]) echo ' selected';
  5. }
  6. }
  7. ?>
  8.  
  9. <form action="" method="post">
  10. <input type="submit" value="Wybierz rabat" name="execute">
  11. <select id="rabat" name="rabat">
  12. <option value='-5'>-5</option>
  13. <option value='1.01'>1</option>
  14. <option value='1.02'>2</option>
  15. <option value='1.03'>3</option>
  16. <option value='1.04'>4</option>
  17. <option value='1.05'>5</option>
  18. <option value='1.06'>6</option>
  19. <option value='1.07'>7</option>
  20. <option value='1.08'>8</option>
  21. <option value='1.09'>9</option>
  22. <option value='1.1'>10</option>
  23. <option value='1.2'>20</option>
  24. <option value='1.3'>30</option>
  25. </select>
  26. </form>
  27. <br>
  28.  
  29. <?
  30.  
  31. (isset($_POST['rabat'])) ? $rabat=$_POST['rabat'] : $rabat=' 0 ';
  32.  
  33.  
  34. ?>
Tomplus
Jak coś polecam używać znaczników <?php a nie <?
nospor
Cytat
Zrobiłem jak poniżej ale nie działa
Nigdzie nie zaznaczasz ostatnio wybranej wiec niby czemu ma ci dzialac? Rownie dobrze mozesz sobei zyczyc nowego ferrari pod domem i ciagle sie dziwic o poranku ze jeszcze nie ma.
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.