Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> PHP Operacje na dużych liczbach
nowAnd22
post 8.08.2011, 18:39:51
Post #1





Grupa: Zarejestrowani
Postów: 8
Pomógł: 0
Dołączył: 20.05.2011

Ostrzeżenie: (0%)
-----


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
Go to the top of the page
+Quote Post
ferrero2
post 9.08.2011, 10:00:20
Post #2





Grupa: Zarejestrowani
Postów: 171
Pomógł: 32
Dołączył: 5.08.2008
Skąd: Lublin

Ostrzeżenie: (0%)
-----


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


--------------------
---------------------------
"Jeżeli trzeci dzień z rzędu nie chce Ci się pracować tzn że dziś jest ŚRODA !
Algorytmy , Programowanie , Tworzenie WWW - SPRAWDŹ
Go to the top of the page
+Quote Post
CuteOne
post 9.08.2011, 13:56:02
Post #3





Grupa: Zarejestrowani
Postów: 2 958
Pomógł: 574
Dołączył: 23.09.2008
Skąd: wiesz, że tu jestem?

Ostrzeżenie: (0%)
-----


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


Sprawdź smile.gif

Ten post edytował CuteOne 9.08.2011, 13:58:08
Go to the top of the page
+Quote Post
nowAnd22
post 9.08.2011, 18:12:05
Post #4





Grupa: Zarejestrowani
Postów: 8
Pomógł: 0
Dołączył: 20.05.2011

Ostrzeżenie: (0%)
-----


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
Go to the top of the page
+Quote Post
Fifi209
post 9.08.2011, 19:24:06
Post #5





Grupa: Zarejestrowani
Postów: 4 655
Pomógł: 556
Dołączył: 17.03.2009
Skąd: Katowice

Ostrzeżenie: (0%)
-----


a my to co? wróżki? jaki typ danych w bazie i jaka baza?


--------------------
Zainteresowania: C#, PHP, JS, SQL, AJAX, XML, C dla AVR
Chętnie pomogę, lecz zanim napiszesz: Wujek Google , Manual PHP
Go to the top of the page
+Quote Post
nowAnd22
post 9.08.2011, 19:42:06
Post #6





Grupa: Zarejestrowani
Postów: 8
Pomógł: 0
Dołączył: 20.05.2011

Ostrzeżenie: (0%)
-----


baza MySQL
decimal(9,2)
Go to the top of the page
+Quote Post
Fifi209
post 9.08.2011, 20:19:37
Post #7





Grupa: Zarejestrowani
Postów: 4 655
Pomógł: 556
Dołączył: 17.03.2009
Skąd: Katowice

Ostrzeżenie: (0%)
-----


A próbowałeś zmieniać na inny typ danych?


--------------------
Zainteresowania: C#, PHP, JS, SQL, AJAX, XML, C dla AVR
Chętnie pomogę, lecz zanim napiszesz: Wujek Google , Manual PHP
Go to the top of the page
+Quote Post
nowAnd22
post 9.08.2011, 21:32:31
Post #8





Grupa: Zarejestrowani
Postów: 8
Pomógł: 0
Dołączył: 20.05.2011

Ostrzeżenie: (0%)
-----


Nie zmieniałem typu danych
Go to the top of the page
+Quote Post
CuteOne
post 9.08.2011, 21:58:47
Post #9





Grupa: Zarejestrowani
Postów: 2 958
Pomógł: 574
Dołączył: 23.09.2008
Skąd: wiesz, że tu jestem?

Ostrzeżenie: (0%)
-----


spróbuj z float(9,2) i pamiętaj, żeby nie używać number_format() na zmiennej, którą zapisujesz smile.gif
Go to the top of the page
+Quote Post

Reply to this topicStart new topic
1 Użytkowników czyta ten temat (1 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Wersja Lo-Fi Aktualny czas: 14.08.2025 - 12:35