![]() |
![]() ![]() |
![]() |
![]()
Post
#1
|
|
Grupa: Zarejestrowani Postów: 350 Pomógł: 31 Dołączył: 23.05.2010 Ostrzeżenie: (0%) ![]() ![]() |
Cześć.
W jaki sposób podchodzicie do przechowywania cen produktów w bazie danych i późniejsze ich wyświetlanie oraz kalkulowanie (odejmowanie, dodawanie) - tak, aby po zaokrągleniu był wynik ten sam co na kalkulatorze. Number Format zaokrągla w zły sposób w konsekwencji ceny nie nakładają się na siebie. |
|
|
![]()
Post
#2
|
|
![]() Grupa: Moderatorzy Postów: 36 557 Pomógł: 6315 Dołączył: 27.12.2004 ![]() |
Ale po co ci do dodawanie czy odejmowania number format? Jesli masz
2.34 + 4.21 to po co tutaj number format? Number format to se mozesz co najwyzej uzyc przy wyswietleniu wyniku, a nie podczas wyliczania wyniku Poza tym, by uniknac ewentualnych problemow z dzialaniem na liczbach rzeczywistych, warto trzymac kwoty w bazie jako INT - liczba groszy, a nie zlotowek -------------------- "Myśl, myśl, myśl..." - Kubuś Puchatek || "Manual, manual, manual..." - Kubuś Programista "Szukaj, szukaj, szukaj..." - Kubuś Odkrywca || "Debuguj, debuguj, debuguj..." - Kubuś Developer |
|
|
![]()
Post
#3
|
|
Grupa: Zarejestrowani Postów: 350 Pomógł: 31 Dołączył: 23.05.2010 Ostrzeżenie: (0%) ![]() ![]() |
Problem w tym, że cały czas zaokrągla groszem w górę.
Wynik php: 12.49 Wynik, który mnie interesuje: 12.48 Jak zmienię zmienną $a na "10.48" bez tego dłuższego ogonu to wszystko jest w porządku. Więc szukamy funkcji, która UTNIE mi reszte cyfr po przecinku (dwa miejsca), ale nie będzie zaokrąglać jak 48 to zaokrągli do 49, itd.. |
|
|
![]()
Post
#4
|
|
![]() Grupa: Moderatorzy Postów: 36 557 Pomógł: 6315 Dołączył: 27.12.2004 ![]() |
Co ty masz za sklep, ze trzymasz w nim wartosci 10.48888 ? Jesli to jest wynik jakis obliczen, to po zaokrągleniu powinnno byc wlasnie 10.49 a nie 10.48
Jesli nadal sie upierasz na niezaokrąglaniu, to zrzutuj liczbe na stringa i srob poprostu substr() -------------------- "Myśl, myśl, myśl..." - Kubuś Puchatek || "Manual, manual, manual..." - Kubuś Programista "Szukaj, szukaj, szukaj..." - Kubuś Odkrywca || "Debuguj, debuguj, debuguj..." - Kubuś Developer |
|
|
![]()
Post
#5
|
|
Grupa: Zarejestrowani Postów: 616 Pomógł: 84 Dołączył: 29.11.2006 Skąd: bełchatów Ostrzeżenie: (0%) ![]() ![]() |
|
|
|
![]()
Post
#6
|
|
Grupa: Zarejestrowani Postów: 1 240 Pomógł: 278 Dołączył: 11.03.2008 Ostrzeżenie: (0%) ![]() ![]() |
Proponuję ceil. W komentarzach znajdziesz funkcję ceil_dec która powinna Ci wystarczyć.
-------------------- |
|
|
![]()
Post
#7
|
|
Grupa: Zarejestrowani Postów: 109 Pomógł: 25 Dołączył: 10.08.2009 Ostrzeżenie: (0%) ![]() ![]() |
Przede wszystkim w bazie kwoty powinieneś przechowywać jako typ DECIMAL z 2 miejscami po przecinku a nie jakieś FLOATY.
Jeżeli problem nadal by występował z jakiegoś powodu to zapoznaj się z funkcją floor floor w pierwszym komentarzu masz rozwiązanie dokładnie twoje problemu. |
|
|
![]()
Post
#8
|
|
Grupa: Zarejestrowani Postów: 12 Pomógł: 0 Dołączył: 23.07.2013 Ostrzeżenie: (0%) ![]() ![]() |
Ja ostatnimi czasy zawsze kwoty w bazie przechowuję z dokładnością do 4 miejsc po przecinku - właśnie przez wzgląd na dokładność przy np przeliczaniu. a Wyświetlam oczywiście zaokrąglone do 2 miejsc po przecinku.
|
|
|
![]()
Post
#9
|
|
Grupa: Zarejestrowani Postów: 109 Pomógł: 25 Dołączył: 10.08.2009 Ostrzeżenie: (0%) ![]() ![]() |
@up
gratuluję pomysłowości ![]() Jakby nie było typu decimal i podobnych to bym prędzej używał liczb całkowitych i przy wyciąganiu dzielił to przez 100, przynajmniej można by było wtedy skorzystać z operatora = w zapytaniach. |
|
|
![]()
Post
#10
|
|
![]() Grupa: Zarejestrowani Postów: 8 068 Pomógł: 1414 Dołączył: 26.10.2005 Ostrzeżenie: (0%) ![]() ![]() |
Cytat Przede wszystkim w bazie kwoty powinieneś przechowywać jako typ DECIMAL z 2 Tak o ile zostaną zaokrąglone w odpowiedni sposób. Dlatego trzymanie w bazie kwot do 4 miejsc po przecinku jest dla mnie jak najbardziej odpowiednie. Jest może troszkę większy nakład pracy i czujności na operowaniu tego typu danymi ale potem jest pewność że wszystko sie zgadza. @up i nie wiem co Cię tak szokuje w większej ilości miejsc po , |
|
|
![]()
Post
#11
|
|
Grupa: Zarejestrowani Postów: 109 Pomógł: 25 Dołączył: 10.08.2009 Ostrzeżenie: (0%) ![]() ![]() |
@up W programowaniu/projektowaniu dobrą cechą jest nakładanie sobie ograniczeń dzięki czemu program jest mniej podatny na błędy.
Na pewno istnieją sytuację gdzie należy przechowywać większą liczbę miejsc po przecinku np. przy przeliczenia podatku VAT. Tylko, że nie jest to kwestia wyboru i ostrożności pisania kodu tylko konieczność. Na pewno nie ma takiej reguły. Na stronie i tak trzeba podać cenę z 2 miejscami, gdyby była sytuacja, że przechowywane są 4 miejsca i cena 2 różnych produktów wynosi 1,00 to po ich dodaniu i zaokrągleniu (zależnie od sposobu zaokrąglania) moglibysmy otrzymać cenę różną o grosz, gdyby zaokrąglać te produkty za każdym razem z osobna (żeby otrzymać prawidłową sumą) to po co trzymać więcej miejsc i dodawać sobie roboty. |
|
|
![]()
Post
#12
|
|
![]() Grupa: Zarejestrowani Postów: 8 068 Pomógł: 1414 Dołączył: 26.10.2005 Ostrzeżenie: (0%) ![]() ![]() |
@up
![]() Jeżeli będziesz miał popisane metody dla produktu które przeliczają ceny (metody w jednym miejscu a nie porozwalane po xx klasach) to jeżeli są one poprawnie napisane i korzysta się tylko z nich do tego celu to nie ma żadnego kłopotu ![]() Ale owszem jeżeli widzę kwiatki które przeliczają sumę koszyka w każdym jego kroku w całości i od nowa to już się mija kompletnie z celem. |
|
|
![]() ![]() |
![]() |
Aktualny czas: 22.08.2025 - 03:22 |