Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: Zaokrąglanie sumy liczb do 100%
Forum PHP.pl > Forum > PHP
Ryder
Witam


Jak zamienić wszystkie liczy ze zbioru na procenty, tak aby wartość zawsze równała się 100% a nie 99,99, 100,05%, itp.

Załóżmy mamy

Liczby 2,5,8 = 15

Zamieniamy na procenty
Dla liczby 2 mamy round(((2 * 100) / 15), 1) = 13,33 = 13,3
Dla liczby 5 mamy round(((5 * 100) / 15), 1) = 33,33 = 33,3
Dla liczby 2 mamy round(((8 * 100) / 15), 1) = 53,33 = 53,3


Łacznie daje 13,3 + 33,3 + 53,3 = 99,6

Jak zrobić, żeby wartości składowe dawały zawsze wartość po zsumowaniu 100,
czyli np: 13,4 + 33,4 + 53,2
nospor
Ostatnią wartosc masz wyliczać tak:
100 - suma_procentów_pozostałych_wartosci
Wtedy nie bedziesz mial problemów.
Crozin
Ewentualnie pozostałą wartość (100 - suma pozostałych) po równo rozdzielasz do wszystkich wyników by uniknąć sporego przekłamania rzędu 0,4%. Oczywiście to tworzy dokładnie ten sam problem (0,4 może nie dać się ładnie rozłożyć), wtedy już resztę z reszty możesz dopisać do ostatniego wyniku - nie powinna to już być zbyt duża wartość.
Uriziel01
Najlepszym rozwiązaniem było by operowanie na większej dokładności tych liczb. Ale jeżeli nie masz takiej możliwości (dlaczego?) no to od 100 odejmij ostateczna sumę wyników, podziel to na ilość wartości dla których to liczysz i rozłóż równomiernie.

@Crozin-Kurcze, przepraszam ale nie przeczytałem Twojej wypowiedzi. Porponujemy dokładnie takie samo rozwiązanie smile.gif
Ryder
Dzięki za pomoc,

Zrobiłem w ten sposób, że zanim obliczam procenty robię sortowanie na tabli z liczbami od najmniejszej do największej.
Następnie zamieniam wszystkie wartości na procenty oprócz ostatniej. Dla ostatniej odejmuje 100% - suma poprzednich.
Dla największej wartości powinno być najmniejsze przekłamanie.
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.