[PHP] poll berekenen 100%

Pagina: 1
Acties:

Onderwerpen


Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
Ik ben bezig met poll maar nu wil ik dat de balkjes 100% worden. (rare omschrijving). Dus ook zoals tweakers.net op de frontpage heeft bij de poll, dat de optie met de meeste stemmen 100% breed is, en die daar onder daar dus op volgen...

PHP:
1
$this->data[$i]['percent'] = round(100 / ($total_votes / $this->data[$i]['votes']), 0);


maar dit rekent gewoon het aantal procent uit...

wie kan me verder helpen? :)

Acties:
  • 0 Henk 'm!

  • Voutloos
  • Registratie: Januari 2002
  • Niet online
Je hebt een max breedte en je hebt de percentages van elke optie.
Gewoon de ratio van elke optie met de populairste optie uitrekenen en vermeningvuldigen met de max breedte.

{signature}


Acties:
  • 0 Henk 'm!

Verwijderd

Eerst zoek je maximum, dat stel je gelijk aan 100%, en daarna voer je dezelfde berekening uit. Iets omgeschreven issie makkelijker te lezen:

PHP:
1
$this->data[$i]["percent"] = round(($this->data[$i]["votes"] / $maxvotes) * 100);


edit:
Dit is dus gewoon lineaire interpolatie, en dat hoort tot je basiskennis te behoren. Doet het dat niet, verdiep je er dan ff in. Je hebt het namelijk vaak nodig als je informatie probeert te visualiseren: bij een afbeelding schalen, een progressbar laten zien, poll resultaten visualiseren, kleurtjes mengen, etc.

Het ziet er altijd als volgt uit:

p = (x / X) * R + o

x is hier de waarde die je wilt afbeelden, en X is het maximum dat de waarde aan kan nemen. o geeft aan waar het afbeelden moet beginnen (vaak 0), en R geeft aan hoe groot het "ding" (laten we zeggen, "de balk") maximaal mag zijn (dus de balk is R groot als x = X, en de balk is 0 groot als x = 0).

Kort uitgelegd: x / X geeft altijd een waarde tussen 0 en 1 terug. Die schaal je op met een factor R. Uiteindelijk kun je nog transleren, als je dat wilt.

[ Voor 66% gewijzigd door Verwijderd op 02-08-2004 17:14 ]


Acties:
  • 0 Henk 'm!

  • GlowMouse
  • Registratie: November 2002
  • Niet online
Met de max() functie kun je de hoogste vinden als alles in een array zit.

Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
bedankt allemaal, het is gelukt :)

voortaan toch beter opletten bij wiskunde... :/

Acties:
  • 0 Henk 'm!

  • Anders
  • Registratie: December 2000
  • Laatst online: 13-09 18:52
Let ook op met dat round(), wanneer je de percentages ook afgerond toont tenminste

VB: als je drie balkjes hebt van 33,3% en je rond dat af, krijg je drie maal 33%, zodat de rekenende eindgebruiker zich afvraagt waar die ene procent is gebleven. De polls van Voetbal International hebben daar een handje van, en dat staat op z'n zachtst gezegd nogal slordig.

Ik spoor veilig of ik spoor niet.


Acties:
  • 0 Henk 'm!

  • Soultaker
  • Registratie: September 2000
  • Laatst online: 20-09 18:51
Anders: dat is vrij gebruikelijk hoor. Hoe wil je het probleem anders oplossen? Je kunt de resultaten wel zo aanpassen dat het totaal 100% is, maar dat is niet altijd eerlijk. Als drie opties exact evenveel stemmen hebben, kan je moeilijk één van de opties een extra procent. Je moet naar mijn mening dan beter met een totaal van 99% genoegen nemen.

Overigens is een totaal boven de 100% zo ook mogelijk.

Acties:
  • 0 Henk 'm!

  • Voutloos
  • Registratie: Januari 2002
  • Niet online
offtopic:
En een beetje persoon die alles narekent mag ook wel bekend zijn met het begrip significantie natuurlijk. ;)

edit:
@hieronder: En dus kan 3x 33 net zo goed 3x 33.3333333... zijn :)

[ Voor 26% gewijzigd door Voutloos op 02-08-2004 23:55 ]

{signature}


Acties:
  • 0 Henk 'm!

  • Zoijar
  • Registratie: September 2001
  • Niet online

Zoijar

Because he doesn't row...

Significantie is heel iets anders toch? Dat gaat hier niet op want het gaat om exacte getallen, en niet om metingen met eventuele fouten. Significantie betekent dat 4.5 moet worden opgevat als [4.45, 4.55] en 4 als [3.5, 4.5]

Acties:
  • 0 Henk 'm!

  • Basszje
  • Registratie: Augustus 2000
  • Laatst online: 09:08

Basszje

Reisvaap!]

Eerlijk gezegd zou ik voor zoiets insignificants ook gewoon afronden. Eventueel kan je trouwens de waardes die je laat zien ( de balkjes ) loskoppelen van de waardes die je naast de balkjes plempt en die bijvoorbeeld op 1 decimaal afronden. Dan ondervang je het probleem ook grotendeels

Beware of listening to the imposter; you are undone if you once forget that the fruits of the earth belong to us all, and the earth itself to nobody.


Acties:
  • 0 Henk 'm!

  • Cartman!
  • Registratie: April 2000
  • Niet online
Ik doe ook altijd gewoon 1 getal achter de komma en dan krijgt de laagste waarde de 'rest'-waarde. Vind ik netter dan dat je op 103 procent uitkomt...
Pagina: 1