webForumDet fria alternativet

Avrunda procent

ASP

17 svar · 904 visningar · startad av MickeA.com

Medlem sedan feb. 20034 441 inlägg
Frågan#1

Hej

Håller på o gör en undersökning, Asp / Access / Flash.

Räknar ut procenten av resultaten såhär:

________________________

total = res1 + res2 + res3

pro1 = res1 / total * 100
pro2 = res2 / total * 100
pro3 = res3 / total * 100
________________________

Nu vill jag avrunda dessa pro1, pro2 och pro3 så att det blir till HELTAL.

Hur gör jag?!

Medlem sedan mars 20025 907 inlägg
#2

Använd funktionen round().

Medlem sedan nov. 20014 054 inlägg
#3

Använd dig av : Round(), ex: Round(res1 / total * 100)

Medlem sedan nov. 20014 054 inlägg
#4

Attans Peeer, du var snabbare!!! :e

Medlem sedan feb. 20034 441 inlägg
#5

Tack & Bock

Medlem sedan mars 20025 907 inlägg
#6

Fredde Mannen skrev:

Attans Peeer, du var snabbare!!! :e

Amuahaha ;)

Medlem sedan feb. 20034 441 inlägg
#7

JAg kan ju säga att det här med round() suger rätt hårt.

När jag nu kör min poll och den räknar upp resultaten i procent, blir det totalt 99%, vilket suger, det totala skall ju alltid vara 100%?!

Medlem sedan dec. 200012 464 inlägg
#8

Varför skulle det alltid bli 100%. Förklara det för mig.

Medlem sedan juni 200032 967 inlägg
#9

Då får du se till att kompensera.

Avrundar du så tappar du alltid precision.

Medlem sedan feb. 20034 441 inlägg
#10

Men säg att du har 100 röster, tre alternativ

DEN SAMMANLAGDA TOTALA FÖRDELNINGEN MELLAN DESSA RÖSTER BLIR JU ALLTID LIKA MKT SOM DET TOTALA ANTALET RÖSTER, eller hur?! (sorry, capslock...)

Medlem sedan dec. 200012 464 inlägg
#11

Säg att du har 99 röster 3 alternativ och varje alternativ får 33 röster.

Dvs vardera 33.333..... % (oändligt antal treor)

Avrundat till ett heltal blir det 33. Du har tappat 0.333.....

Heltalet 33 innehåller inte lika mycket information det reella talet 33.333....

Det hele beror på vilken representation du använder. Det går inte att representa värden exakt med hjälp av flyttal så oavsett huir du gör så kan det bli fel om du räknar om till %

@nders:

Hur då kompensera? Det fungerar i vissa fall men inte alltid så jag ser inte hur det hjälper generellt sett.

Medlem sedan mars 20025 907 inlägg
#12

Om du har 99 röster och 3 alternativ. Alla alternativen har lika många röster (dvs 33), och du vill visa andelen röster på varje alternativ (i hela procentenheter). Då kommer varje alternativ naturligtvis få (33/99)*100% (~33,333%) av alla röster. Men eftersom du avrundar till 33% så förlorar du 0,333 procentenheter för varje alternativ, totalt 0,999procentenheter alltså. Om du sen räknar ihop de olika procentenheterna så finner du att det saknas 1 för att det ska bli hundra. Det är ju logiskt!

@nders skrev:

Avrundar du så tappar du alltid precision.

/r LarsG är snabbare än mig :)

Medlem sedan juni 200032 967 inlägg
#13

LarsG skrev:

Hur då kompensera? Det fungerar i vissa fall men inte alltid så jag ser inte hur det hjälper generellt sett.

Nej, generellt sett hjälper inte det. Men om man avrundar ett antal tal och kräver att summan skall bli ett exakt tal kan man bli tvungen att kompensera.

Det bästa är väl att skriva att talen är avrundade och ungefärliga.

Mvh

Medlem sedan dec. 20003 887 inlägg
#14

Eller så kollar du om summan av delresultaten är 100. Är den 99 eller 101, så lägger du helt enkelt till eller drar ifrån ett från något av resultaten och kallar det för den statistiska normalavvikelsen, så är du home free.

Medlem sedan juni 20014 290 inlägg
#15

En bra lösning som brukar fungera är att avrunda så sent som möjligt., då tappar man inte så mycket i precision.

I ditt fall så borde det bli något såhär:

total = res1 + res2 + res3

pro1 = round(res1 / total * 100)
pro2 = round(res2 / total * 100)
pro3 = round(res3 / total * 100)

pro_tot=round(res1 / total * 100 + res2 / total * 100 + res3 / total * 100)

Medlem sedan nov. 20017 144 inlägg
#16

Det finns ju en vbScript funktion som heter "FormatPercent".

total = res1 + res2 + res3

pro1 = round(FormatPercent(res1))
pro2 = round(FormatPercent(res2))
pro3 = round(FormatPercent(res3))

pro_tot=round(FormatPercent(res1) + FormatPercent(res2) + FormatPercent(res3))
Medlem sedan dec. 20003 887 inlägg
#17

Sant. FormatPercent tar som andraargument antal decimaler, så det hela kan väl skrivas som:

pro1 = FormatPercent(res1, 0)
pro2 = FormatPercent(res2, 0)
pro3 = FormatPercent(res3, 0)

pro_tot = FormatPercent(res1 + res2 + res3, 0)
Medlem sedan feb. 20034 441 inlägg
#18

Ok tack killar, ska se, har nu märkt att jag även avrundar ytterliggare en gång när jag skickat variablerna in i flash, och det verkar onödigt, antagligen det som ställer till de ;)

263 ms totalt · 4 externa anrop · v20260731065814-full.6fe65c25
124 ms — deklarationer (db)
0 ms — hämta statistik (cache)
136 ms — hämta tråd, inlägg och bilagor (db)
123 ms — ändringar (db)