Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> Podział floata % na 3 części a zaokrąglanie
duch4ever
post 5.11.2019, 16:27:39
Post #1





Grupa: Zarejestrowani
Postów: 155
Pomógł: 0
Dołączył: 22.06.2010

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


Witam, mam nietypowy problem i nie wiem jak to ugryźć smile.gif

Mam zamówienie na kwotę powiedzmy 100zł i w skład którego wchodzą produkty i teraz dajemy rabat na zamówienie 30% więc kwota zamówienia to 70zł.
I teraz muszę proporcjonalnie obniżyć kwotę każdego produktu o 30% ALE tak aby suma była równa 70.00 zł, problem to oczywiście zaokrąglanie kwot bo kiedy cenę każdego z produktów obniżymy o 30% to na na końcu często będzie różnica +1/-1 grosz.

Jest jakiś algorytm który rozwiąże problem? Możne kwotę zrobić jako int i trzeba ją % podzielić na x części bez zaokrąglania.
Miał może ktoś podobny problem?

Z góry dzięki za pomoc!
Go to the top of the page
+Quote Post
trueblue
post 5.11.2019, 16:51:34
Post #2





Grupa: Zarejestrowani
Postów: 5 570
Pomógł: 1519
Dołączył: 11.03.2014

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


A musisz pokazywać obniżoną cenę każdego produktu? Skoro rabat jest na całość, to mnie jako klienta i tak nie interesuje jaką cenę po zniżce będzie mieć każdy produkt (bo i tak nie kupię jednego).
A jeśli musisz pokazywać, to może na zasadzie CENA zł - 30%. Choć ja bym się kierował tym co napisałem wyżej.


--------------------
Go to the top of the page
+Quote Post
duch4ever
post 5.11.2019, 17:35:36
Post #3





Grupa: Zarejestrowani
Postów: 155
Pomógł: 0
Dołączył: 22.06.2010

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


No właśnie muszę bo dane muszę wysłać dalej po API i suma musi się zgadzać.

Ten post edytował duch4ever 5.11.2019, 17:35:59
Go to the top of the page
+Quote Post
trueblue
post 5.11.2019, 18:30:30
Post #4





Grupa: Zarejestrowani
Postów: 5 570
Pomógł: 1519
Dołączył: 11.03.2014

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


Czyli nie wysyłasz sumarycznej wartości po obniżce, tylko ma ona wynikać z sumy cen produktów po zniżce, tak?

Zakładam, że ceny produktów wchodzących w skład zamówienia są różne (bo jeśli dzielisz po prostu sumę po zniżce np. na 3, to wystarczy, że reszty z zaokrągleń dwóch pierwszych produktów dodasz do ceny trzeciego - będzie po prostu większa lub mniejsza, zależy w jaki sposób będziesz sprowadzał ceny do liczby całkowitej).

Jeśli jednak ceny są różne, to zrobiłbym tak:

1. Obliczasz cenę pierwszego produktu po zniżce.
2. Jeśli nie jest całkowita, to zaokrąglasz do najbliższej najmniejszej (funkcja floor).
3. Resztę wynikającą z zaokrąglenia zapisujesz.
4. Obliczasz cenę kolejnego produktu.
5. Jeśli nie jest całkowita, to dodajesz resztę z punktu 3.
6. Jeśli nadal nie jest całkowita, to zaokrąglasz do najbliższej najmniejszej (funkcja floor).
7. Resztę z wyniku z zaokrąglenia zapisujesz.
8. Jeśli masz do czynienia z ostatnim produktem, to jego cena jest równa sumie całkowitej po zniżce minus sumie cen wcześniejszych produktów po zniżce.
9. Jeśli to nie ostatni produkt, to wracasz do punktu 4.


Dla przykładu:

Ceny: 31, 36, 33

31 - 30% = 21,7.
Obcinam do 21, zapisuję 0,7.

36 - 30% = 25,2. Dodaję 0,7. Mam 25,9, więc nadal nie jest całkowita.
Obcinam do 25, zapisuję 0,9.

33 jest ostatnią, więc obliczam jej cenę jako 70 - (21 + 25) = 70 - 46 = 24. Gdybym obliczał 33 - 30%, to cena wyniosłaby 23,1.

Ten post edytował trueblue 5.11.2019, 18:53:10


--------------------
Go to the top of the page
+Quote Post
duch4ever
post 6.11.2019, 15:11:55
Post #5





Grupa: Zarejestrowani
Postów: 155
Pomógł: 0
Dołączył: 22.06.2010

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


Tak dokładnie, o coś takiego chodzi właśnie.
Chyba takie rozwiązanie się sprawdzi, gdyby jeszcze ktoś miał pomysły to można pisać 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: 22.11.2019 - 23:34