Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: PHP Operacje na dużych liczbach
Forum PHP.pl > Forum > PHP
nowAnd22
Witajcie,
mam problem z dodawaniem dużych liczb.
Gdy dodaje z bazy produkty w cenie np. 599.00 i 599.00 to mi liczy sume i jest dobrze,
ale jeśli wybiorę produkt ponad 1000.00 to już nie działa i wyświetla np. 1,00 lub 2,00
W bazie zmieniłem format kwoty na decimal(7,2)
fragment kodu:

  1. <?php
  2. $total = 0;
  3. while ($row = mysql_fetch_array($results)) {
  4. echo "<tr>";
  5. extract($row);
  6. $prod = "SELECT * FROM produkty " .
  7. "WHERE produkty_id='$tymczasowa_prod_id'";
  8. $prod2 = mysql_query($prod);
  9. $prod3 = mysql_fetch_array($prod2);
  10. extract($prod3);
  11. echo "<td>
  12. <form method=\"POST\" action=\"modcart.php?action=change\">
  13. <input type=\"hidden\" name=\"modified_hidden\"
  14. value=\"$tymczasowa_ukryty\">
  15. <input type=\"text\" name=\"modified_quan\" size=\"2\"
  16. value=\"$tymczasowa_ilosc\">";
  17. echo "</td>";
  18. echo "<td>";
  19. echo "<a href=\"getprod.php?prodid=" . $produkty_id . "\">";
  20. echo "MINIATURKA</a></td>";
  21. echo "<td>";
  22. echo "<a href=\"getprod.php?prodid=" . $produkty_id . "\">";
  23. echo $produkty_nazwa;
  24. echo "</a></td>";
  25. echo "<td align=\"right\">";
  26. echo number_format($produkty_cena, 2);
  27. echo "</td>";
  28. echo "<td align=\"right\">";
  29. // oblicz łączną cenę za produkt
  30. $extprice = number_format($produkty_cena * $tymczasowa_ilosc, 2);
  31. echo $extprice;
  32. echo "</td>";
  33. echo "<td>";
  34. echo "<input type=\"submit\" name=\"Submit\"
  35. value=\"Zmień liczbę sztuk\">
  36. </form></td>";
  37. echo "<td>";
  38. echo "<form method=\"POST\" action=\"modcart.php?action=delete\">
  39. <input type=\"hidden\" name=\"modified_hidden\"
  40. value=\"$tymczasowa_ukryty\">";
  41. echo "<input type=\"submit\" name=\"Submit\"
  42. value=\"Usuń produkt\">
  43. </form></td>";
  44. echo "</tr>";
  45. // dodaj ceny łączne poszczególnych produktów
  46. $total = $extprice + $total;
  47.  
  48. }
  49. ?>
  50. <tr>
  51. <td colspan="4" align="right">
  52. Całkowita kwota:</td>
  53. <td align="right"> <?php echo number_format($total, 2); ?></td>


czy to wina bazy czy w kodzie PHP zmienna $total nie może poradzić sobie z liczbami powyżej 1000.00

Próbowałem też z
  1. &total = bcadd($extprice, $total);

ale nie pomogło

Gdy zmienna $extprice jest mniejsza od 1000.00 to wszystko działa i
wynik w zmiennej $total jest wyświetlany dobrze,
A gdy zmienna $extprice jest większa od 1000.00 to $total nie dodaje
ferrero2
Nie wiem co to za baza, ale (7,2) może oznaczać, że 7 znaków, z czego 2 po przecinku smile.gif
Dodaj sobie dwie wartości w PHP nie korzystając z SQL i wyświetl.
Potem dodaj sobie dwie wartości w bazie poprzez testową kwerendę.

Trudno powiedzieć nie znając serwera baz danych i jej konfiguracji.
Na pewno nie jest to wina zmiennej, bo php sam dostosowuje sobie rodzaj zmiennej jeżeli jej na stałe nie zadeklarujesz wcześniej.

Pozdrawiam
MW
CuteOne
  1.  
  2. $extprice = $produkty_cena * $tymczasowa_ilosc;
  3. echo $extprice.'<br/>';
  4.  
  5. $total = $extprice + $total;
  6. echo $total.'<br/>';
  7.  


Sprawdź smile.gif
nowAnd22
CuteOne
Wielkie dzięki CuteOne
bez zaokrąglenia zmiennej $extprice wszystko śmiga

Dobrze jest ale nie do końca jak cena jest zapisana w bazie powyżej 1000.00
wstawia np. 0.00, 1.00, 2.00
Zwiększyłem pole decimal(9,2) lecz nic nie pomaga,


zmienna $total już dobrze wyświetla,
ale w bazie żle zapisuje
Fifi209
a my to co? wróżki? jaki typ danych w bazie i jaka baza?
nowAnd22
baza MySQL
decimal(9,2)
Fifi209
A próbowałeś zmieniać na inny typ danych?
nowAnd22
Nie zmieniałem typu danych
CuteOne
spróbuj z float(9,2) i pamiętaj, żeby nie używać number_format() na zmiennej, którą zapisujesz smile.gif
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.