Ryder
1.12.2011, 12:21:10
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
1.12.2011, 12:22:29
Ostatnią wartosc masz wyliczać tak:
100 - suma_procentów_pozostałych_wartosci
Wtedy nie bedziesz mial problemów.
Crozin
1.12.2011, 12:32:26
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
1.12.2011, 13:07:24
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
Ryder
1.12.2011, 13:13:39
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.