17. august 2006 - 19:00
Der er
79 kommentarer og 2 løsninger
Hjælp til udregning i ASP
Jeg arbejder på en slags hot or not, jeg har input fra 1 til 3 i databasen og jeg gemmer hvor mange stemmer der er gået ind. Men jeg kan ikke få out-putet beregnet korrekt, så der også vises procent. Er der nogen der har et bud, om det kan laves?
Annonceindlæg tema
Offentlig digitalisering
Fra effektivisering til digital suverænitet. Hvordan skaber det offentlige en digital fremtid med AI, sikkerhed og kontrol i centrum?
17. august 2006 - 19:01
#1
Du skal ligge stemmerne sammen i databasen og så gemme hvor mange der har stemt, gør du det?
17. august 2006 - 19:19
#2
ja det gør jeg..
17. august 2006 - 19:26
#3
Hvis du lægger tallene sammen, og antallet af stemmer, er det simpelt nok: sql = "select * from TabelNavn where id = " & id ... response.write "procent: " & CBDL( CDBL(rs("rating")) / CInt(rs("antal_stemmer")) )
17. august 2006 - 19:27
#4
Egenligt burde det være: response.write "procent: " & CBDL( CInt(rs("rating")) / CInt(rs("antal_stemmer")) ) Da rating (det man har stemt) og antallet af stemmer, begge er hele tal. Procent delen kan indeholde kommatal, og er derfor ikke en integer (CInt) men en double (CDbl).
17. august 2006 - 19:29
#5
<% ' Antal stemmer strStemmer = "45" ' Alle stemmer lagt sammen strResultat = "388" hotStatus = strResultat / strStemmer hotStatus = formatnumber(hotStatus, 0, 0) hotStats = hotstatus * 100 response.write(hotstatus) %>
17. august 2006 - 19:38
#6
Nå ja, man skal lige bruger formatnumber.. :-) response.write "procent: " & FormatNumber( CBDL( CInt(rs("rating")) / CInt(rs("antal_stemmer")) ) )
17. august 2006 - 19:40
#7
Man kan også bruger FormatPercent, men man skal lige vende den om, så det er antal_stemmer / rating: response.write "procent: " & FormatPercent( CBDL( CInt(rs("antal_stemmer")) / CInt(rs("rating")) ) )
17. august 2006 - 19:41
#8
Kan du udbyde forklaring til dette udtræk? bare så jeg forstår til næste gang :-) response.write "procent: " & CBDL( CInt(rs("rating")) / CInt(rs("antal_stemmer")) )
17. august 2006 - 19:46
#9
CInt(værdi) konverterer "værdi" til en integer, dvs, helttal (uden komma/punktum): 5 CDBl(værdi) konverterer "værdi" til en double, dvs, et kommatal: 5,2 Procenten udregnes, ved sige "rating divideret med antallet af stemmer". Nu skrev du "input fra 1 til 3", så jeg gik ud fra at det var enten 1, 2 eller 3. Altså, at man ikke kan bruge kommatal, som f.eks. 2,4. Hvis man kan bruge kommatal, skal det være: response.write "procent: " & CBDL( CDBl(rs("rating")) / CInt(rs("antal_stemmer")) ) Dvs, CDBl(rs("rating")) i stedet for CInt(rs("rating")).
17. august 2006 - 19:49
#10
Tak jeg prøver mig lige frem..
17. august 2006 - 20:08
#11
Jeg får Overflow i denne linie: hotStatus = strResultat / strStemmer hvad betyder det?
17. august 2006 - 20:11
#12
Hov nu står der: Division by zero
17. august 2006 - 20:12
#13
strStemmer er lig 0. Man kan ikke dividere med 0.
17. august 2006 - 20:13
#14
dim intStemmer intStemmer = CInt(strStemmer) if intStemmer > 0 then ' her udskrives procent else response.write "0 procent" end if
17. august 2006 - 20:22
#15
Må jeg også være med - det er trods alt mig der har smidt med det med: hotStatus = strResultat / strStemmer Jeg har bare gjort sådan her... <% strStemmer = rs("stemmer") strResultat = rs("resultat") if strStemmer > 0 AND strResultat > 0 then ' Regn ud else strStemmer = "0" strResultat = "0" end if %>
17. august 2006 - 20:25
#16
Okay. Hvis jeg sætter en stemme nu med input 3 , så burde det vel være 100%?? Hvis jeg sætter 3 stemmer med input 1 skal udtrækket vel være 33.3%??
17. august 2006 - 20:25
#17
madeindk> Hehe.. jeg kan da sagtens rette i din kode.. :-) (og var også lidt hurtigere) Egenligt er det lidt overflødigt at teste "strResultat > 0", da strResultat automatisk vil være 0 (eller ingenting, men det kommer an på felttype), da der jo ikke har været stemt.. :-) Så kan man nøjes med: if intStemmer > 0 then ' her udskrives procent else strStemmer = "0" strResultat = "0" end if
17. august 2006 - 20:27
#18
kaptajnknas> Du har da ret.. :-) Tænker lige over det..
17. august 2006 - 20:44
#19
Jeg selvfølgelig hæve værdierne til 33 - 66 - 100
17. august 2006 - 20:52
#20
Ja, det ville være det nemmeste.. jeg kan ikke lige se hvordan man skulle gøre det, når det er 1,2 og 3. 33, 66 og 100 er nemmere, da 3 stemmer á 1 "points" vil give 100% :-)
17. august 2006 - 21:02
#21
Ja det kan bruges, men det er ikke den helt rigtige løsning. Hvis jeg gørdet, kan jeg så få udskrevet i procenter med komma som eks. 33.3%
17. august 2006 - 21:04
#22
Det er egenligt lidt forkert, at bruge 33, 66 og 100, da 1/3 ikke er 33, men "33,3333333...." Men ja, du kan godt formatere det så det er på "xx,xx%" formatet..
17. august 2006 - 21:17
#23
Kan du hjælpe lidt med formatering? Skal jeg hæve værdien til 3333 - 6666 - 10000 for at gøre det mere præcis?
17. august 2006 - 22:04
#24
Jeg ved ikke om det gør det mere præcist, men man kunne jo lave en test..
17. august 2006 - 23:41
#25
jo men jeg vil gerne have decimaler med ud, så der eks. står 49,2% er det muligt?
18. august 2006 - 06:48
#26
<% hotStatus = formatnumber(hotStatus, 1, 0) response.write(hotstatus %>
18. august 2006 - 08:01
#27
Man kan faktisk beregne gennemsnittet som en del af selve SQL-kaldet: SELECT count(*) AS antalStemmer, avg(stemme) AS gennemsnit FROM dinTabel
18. august 2006 - 08:51
#28
nielle> Hmm.. Nu ved jeg ikke hvordan kaptajnknas har lavet det, men "count(*) AS antalStemmer" kræver vel, at man har 1 post per bruger der stemmer? Hvis man bare har 1 post ("antal_stemmer","rating","afstemningsid") per afstemning, kan man vel ikke bruge den metode? Jeg er bare nysgerrig.. :-)
18. august 2006 - 09:01
#29
Nej, det er rigtigt. Hvis der ialt er 3 rækker i tabellen - en med antallet af 1-stemmer, en med antallet af 2-stemmer og en med antallet af 3-stemmer - så går det ikke med count() og avg(). Man kan bruge sum() i stedet for count(), men der er vist ikke nogen nem erstatning for avg() i det tilfælde.
18. august 2006 - 10:03
#30
Jeg sætter 1 post per. stemme, så jeg prøver lige de forslag..
18. august 2006 - 12:45
#31
Jeg forstår ikke helt hvordan det her virker: SELECT count(*) AS antalStemmer, avg(stemme) AS gennemsnit FROM dinTabel Kan i forklare det lidt nærmere? Hvad betyder feks. avg?
18. august 2006 - 12:49
#32
avg er gennemsnit... det som avg(stemme) gør er at tage gennemsnittet for de tal som ligger tabellen dinTabel i kolonnen stemme og gemmer dette i variablen gennemsnit
18. august 2006 - 14:14
#33
arhh okay :-D
18. august 2006 - 14:58
#34
"avg" er en forkortelse af "average" så betyder "gennemsnit" på dansk.
19. august 2006 - 11:14
#35
Ved ikke om jeg har overset noget, men jeg får intet ud med dette: Set rs = Conn.Execute("SELECT count(*) AS count, avg(input) AS gennemsnit FROM mintabel") response.write count response.write gennemsnit
19. august 2006 - 11:19
#36
Du skal nok ikke bruge "... AS count" idet count jo er et reserveret ord. Men ellers er det: Set rs = Conn.Execute("SELECT count(*) AS antal, avg(input) AS gennemsnit FROM mintabel") response.write rs("antal") & "<br>" response.write rs("gennemsnit")
19. august 2006 - 11:35
#37
Det var bedre, skal jeg så bruge gennemsnittet i procent beregning herefter?
19. august 2006 - 11:51
#38
Jeg har gennemlæst tråden, men jeg synes ikke rigtigt at jeg kan finde ud af hvad det er for et resultat du gerne vil have ud af det til sidst? Hvordan skal output egentlig se ud?
19. august 2006 - 12:37
#39
Jamen jeg prøver at få et output der hedder eks. 77.8 %
19. august 2006 - 12:44
#40
Du har 3 stemme-muligheder: 1, 2, og 3. Ønsker du at vide hvor mange procent som gar stemt 1, hvor mange procent som har stemt 2, og hvor mange procent som har stemt 3? Eller skal alle tre stemme-muligheder kombineres i et tal?
19. august 2006 - 12:47
#41
Alle stemmer kombineres og deraf skal der beregnes procent
19. august 2006 - 13:05
#42
Det er lidt svært at se hvad det er for en formel du ønsker at bruge. Hvad skal to stemmer, 1 hhv. 1, blive til? Hvad skal to stemmer, 2 hhv. 2, blive til? Hvad skal to stemmer, 3 hhv. 3, blive til? Og hvad skal tre stemmer, 1, 2 og 3, blive til?
19. august 2006 - 13:12
#43
1 svarer til 0% 2 svarer til 50% 3 svarer til 100% Dvs. Hvad skal to stemmer, 1 hhv. 1, blive til? = 0+0/1 = 0% Hvad skal to stemmer, 2 hhv. 2, blive til? = 50+50/2 = 50% Hvad skal to stemmer, 3 hhv. 3, blive til? = 100+100+100/3 = 100% Tre stemmer bliver til: 0+50+100/3 = 75%
19. august 2006 - 13:20
#44
sql = "SELECT avg((stemme-1)*50) AS rating FROM dinTabel" Set rs = Conn.Execute(sql) Response.Write "Rating: " & Round(rs("rating"), 0) & "%<br>"
19. august 2006 - 13:24
#45
Ps: (0+50+100)/3 = giver 50%
19. august 2006 - 13:41
#46
Ja det er rigtig:) Men jeg synes der kommer nogen mærkelige tal ud med den sql og de kommer ikke ud med decimal 100.0%
19. august 2006 - 13:51
#47
Mærkelige tal? Kan du ikke uddybe? Hvis du vil have 1 decimals nøjagtighed, så er det: sql = "SELECT avg((stemme-1)*50) AS rating FROM dinTabel" Set rs = Conn.Execute(sql) Response.Write "Rating: " & Round(rs("rating"), 1) & "%<br>"
19. august 2006 - 13:55
#48
jeg får noget der ligner 47,3258% ud når jeg bruger denne sql
19. august 2006 - 13:58
#49
Round() skulle da gerne runde af? Jeg har ingen holdning til om tallet 47,3258% ellere er det rigtige? Er det det?
19. august 2006 - 13:59
#50
Når der ingen poster er overhoved får jeg resultatet 2317,5%
19. august 2006 - 14:00
#51
Hvor ved sql'en hvor mange stemmer der er lagt??
19. august 2006 - 14:02
#52
SQL'en bliver kørt af databasen. Og, den har skam fuld tjek på de data der ligger i den.
19. august 2006 - 14:03
#53
Hvis der ikke er nogen stemmer i tabellen er gennemsnittet udefineret.
19. august 2006 - 14:06
#54
Det kan jeg ikke få til at virke, det der kommer tættes på er: <% ' Antal stemmer strStemmer = "45" ' Alle stemmer lagt sammen strResultat = "388" hotStatus = strResultat / strStemmer hotStatus = formatnumber(hotStatus, 0, 0) hotStats = hotstatus * 100 response.write(hotstatus) %> Det kommer ud med det korrekte procent, dog ikke med decimel som jeg gerne vil ha'
19. august 2006 - 14:07
#55
<% ' Antal stemmer strStemmer = "45" ' Alle stemmer lagt sammen strResultat = "388" hotStatus = strResultat / strStemmer hotStatus = Round(hotStatus, 1) hotStats = hotstatus * 100 response.write(hotstatus) %>
19. august 2006 - 14:08
#56
Men det giver jo faktisk ikke det resultat som du ønsker i følge 19/08-2006 13:12:16.
19. august 2006 - 14:09
#57
<% ' Antal stemmer strStemmer = "45" ' Alle stemmer lagt sammen strResultat = "388" hotStatus = strResultat / strStemmer hotStatus = Round(hotstatus * 100, 1) response.write(hotstatus) %>
19. august 2006 - 14:10
#58
Jo får det er de samme værdier der er samlet i en anden kolonne, så det skulle være det samme.
19. august 2006 - 14:12
#59
Nej, for med den formel så tæller en stemme på 1 som noget mere end 0%
19. august 2006 - 14:14
#60
Men hvorfår siger du: avg((stemme-1)*50) Det er jeg ikke med på.
19. august 2006 - 14:20
#61
Trin 1) Regnestykket stemme-1 giver: 1 -> 0 2 -> 1 3 -> 2 Trin 2) Regnestykket (stemme-1)*50 giver: 1 -> 0 -> 0 2 -> 1 -> 50 3 -> 2 -> 100 Det var de procenter du ville i følge 19/08-2006 13:12:16. Trin 3) Regnestykket avg((stemme-1)*50) udregnmer gennemsnittet af alle stemmerne: 1+2+3 -> (0+50+100)/3 = 50%
19. august 2006 - 14:33
#62
Ja det lyder rigtig nok. hm. men ikk om jeg kan få det til at fungerer. Men ligger det i mine input's jeg sætter nemlig ikke værdierne 1 - 2 - 3 ind i kolonnen, men 0 - 50 - 100
19. august 2006 - 14:38
#63
Hvad står der i databasen 1,2,3 eller 0,50,100?
19. august 2006 - 14:42
#64
0,50,100
19. august 2006 - 14:45
#65
Hvorfor i alverdene har du så skrevet 1, 2, og 3 hele tide? Så skal koden jo passe på disse tal i stedet: sql = "SELECT avg(stemme) AS rating FROM dinTabel" Set rs = Conn.Execute(sql) Response.Write "Rating: " & Round(rs("rating"), 1) & "%<br>" - og så er det rigtogt nok at koden i 19/08-2006 14:06:02 også giver det rigtige.
19. august 2006 - 14:54
#66
Ja nu virker det :-) min fejl med 1-2-3 Sorry. Nu er det kun en sidste ting, nemlig når der ikke er stemt kommer fejlen: Invalid use of Null: 'round' Er det muligt at omgås dette på en eller anden måde?
19. august 2006 - 15:00
#67
Sådan: sql = "SELECT count(*) AS antalStemmer, avg(stemme) AS rating FROM dinTabel" Set rs = Conn.Execute(sql) If rs("antalStemmer") = 0 Then Response.Write "Der er ikke stemt.<bt>" Else Response.Write "Rating: " & Round(rs("rating"), 1) & "%<br>" End If - eller muligvis noget i denne stil: sql = "SELECT avg(stemme) AS rating FROM dinTabel" Set rs = Conn.Execute(sql) If rs("rating") = Nothing Then Response.Write "Der er ikke stemt.<bt>" Else Response.Write "Rating: " & Round(rs("rating"), 1) & "%<br>" End If - eller: If rs("rating") = Null Then Response.Write "Der er ikke stemt.<bt>" Else Response.Write "Rating: " & Round(rs("rating"), 1) & "%<br>" End If Jeg er dog ikke helt sikker på om de to sidste virker.
19. august 2006 - 15:02
#68
Jeg tror dog mest på den sidste af de to. :^)
19. august 2006 - 15:12
#69
Ingen af dem virker.:( Har også prøvet: If not rs.eof then Response.Write "Rating: " & Round(rs("rating"), 1) & "%<br>" else Response.Write "Der er ikke stemt.<bt>" End If
19. august 2006 - 15:18
#70
Ja, den virker i hvert fald ikke for der vil altid blive returneret præcis en række med resultater. Men denne her skal altså fungere: sql = "SELECT count(*) AS antalStemmer, avg(stemme) AS rating FROM dinTabel" Set rs = Conn.Execute(sql) If rs("antalStemmer") = 0 Then Response.Write "Der er ikke stemt.<br>" Else Response.Write "Rating: " & Round(rs("rating"), 1) & "%<br>" End If
19. august 2006 - 15:25
#71
Perfekt det virker bare :-)
19. august 2006 - 15:26
#72
Hmm, men det var jo også den første af dem jeg viste i 19/08-2006 15:00:57. Hvorfor skrev du så at der ikke var nogen af dem der virkede?
19. august 2006 - 15:29
#73
Jeg havde ikke fået count(*) AS antalstemmer med.
19. august 2006 - 15:30
#74
Ok, det forklare jo det jo. :^)
19. august 2006 - 15:31
#75
:-) så er svar = point herfra.
19. august 2006 - 15:34
#76
Der er vist også andre end mig som kan tillade sig at smide svar på denne her. :^)
19. august 2006 - 15:35
#77
Jeps vi venter...
20. august 2006 - 14:56
#78
Svar.
20. august 2006 - 21:47
#79
Lægger også lige et svar :^)
21. august 2006 - 10:28
#80
Ingen points til mig, tak.
21. august 2006 - 13:15
#81
Points :^)
Kurser inden for grundlæggende programmering