Avatar billede muffemand Nybegynder
31. august 2004 - 17:25 Der er 11 kommentarer

Talsammenlægnings fejl

Ja, jeg har lavet noget hvor man skal kunne give forskellige karakterer til nogle ting.
Og karaktererne består af:
0 - 0,5 - 1 - 1,5 - 2 - 2,5 - 3 - 3,5 - 4 - 4,5 - 5

Disse tal kan man vælge i en scrolldownbox.

Så bruger jeg denne kode til at lægge de forskellige tal sammen, og finde gennemsnittet af tallene:

kodeeksempel...
<%
        Set myConn = Server.CreateObject("ADODB.Connection")
          myConn.Open "DRIVER={Microsoft Access Driver (*.mdb)}; DBQ=" & Server.MapPath ("anmeldelser.mdb")
       
          Set rs2 = Server.CreateObject("ADODB.RecordSet")
          strSQL = "SELECT SUM(Karakter) As IaltHoved FROM Hoved_anmeldelser WHERE ID = " & rs("ID") & " AND Godkendt='Ja' "
        rs2.Open strSQL, myConn, 1, 3

          Set rs3 = Server.CreateObject("ADODB.RecordSet")
          strSQL = "SELECT SUM(Karakter) As Ialt FROM Anmeldelser WHERE AnmeldelsesID = " & rs("ID") & " AND Godkendt='Ja' "
        rs3.Open strSQL, myConn, 1, 3

        Set rs4 = Server.CreateObject("ADODB.RecordSet")
        strSQL = "SELECT * FROM Hoved_anmeldelser WHERE ID = " & rs("ID") & " AND Godkendt='Ja' "
        rs4.Open strSQL, myConn, 1, 3

        Set rs5 = Server.CreateObject("ADODB.RecordSet")
        strSQL = "SELECT * FROM Anmeldelser WHERE AnmeldelsesID = " & rs("ID") & " AND Godkendt='Ja' "
        rs5.Open strSQL, myConn, 1, 3
      %>
     
      <% If rs5.RecordCount = "0" Then     
        Karakterer = rs2("IaltHoved") / rs4.RecordCount
        Else
          Karakterer = (rs3("Ialt") + rs2("IaltHoved")) / (rs4.RecordCount + rs5.RecordCount)
        End If %>

Håber I er med så langt.

Samtidig har jeg så nogle billeder som har samme navn som de karakterer man kan give.
Og for at alt det kommer til at passe har jeg så denne kode, som runder op til de tal de nu skal:

kodeeksempel...

<% If Karakterer < "0,25" Then
        Gennemsnit = "0"
        ElseIf Karakterer = "0,5" Then
            Gennemsnit = "0,5"
          ElseIf Karakterer < "0,75" Then
            Gennemsnit = "0,5"
          ElseIf Karakterer < "1,25" Then
            Gennemsnit = "1"
          ElseIf Karakterer = "1,5" Then
            Gennemsnit = "1,5"
        ElseIf Karakterer < "1,75" Then
            Gennemsnit = "1,5"
          ElseIf Karakterer < "2,25" Then
        Gennemsnit = "2"
        ElseIf Karakterer = "2,5" Then
        Gennemsnit = "2,5"
        ElseIf Karakterer < "2,75" Then
          Gennemsnit = "2,5"
          ElseIf Karakterer < "3,25" Then
            Gennemsnit = "3"
        ElseIf Karakterer = "3,5" Then
            Gennemsnit = "3,5"
        ElseIf Karakterer < "3,75" Then
            Gennemsnit = "3,5"
        ElseIf Karakterer < "4,25" Then
          Gennemsnit = "4"
        ElseIf Karakterer = "4,5" Then
          Gennemsnit = "4,5"
          ElseIf Karakterer < "4,75" Then
            Gennemsnit = "4,5"
        ElseIf Karakterer < "5,25" Then
            Gennemsnit = "5"
          End If
      %>

Nå, men hvis der nu, som der skal, laves en "Hoved anmeldelse" som man så bagefter kan tilføje anmeldelser til, og man f.eks. vælger karakteren 4,5.
Så tager den jo det tal, og dividerer med så mange anmeldelser der nu er, altså i dette tilfælde 1, hvilket jo vil give 4,5.
Problemet er så bare at den IKKE viser 4,5, men den i stedet runder op eller ned (Kan ikke huske det) til 4 eller 5, selvom den jo i princippet skal være 4,5.
Og det er jo forkert.
Og det er ligemeget om jeg tilføjer 10 med samme karakter, det bliver stadig ikke et halvt tal, MEDMINDRE jeg har to forskellige karakterer, f.eks. 2 og 3 hvilket jo giver 2,5 i gennemsnit, så udskriver den nemlig 2,5.
Og jeg fatter det simpelthen ikke...

Nogle der kan se hvad problemet kunne være ?

Håber egentlig også I forstår hvad jeg mener, ellers må i jo spørge
Avatar billede tjaz Nybegynder
31. august 2004 - 17:32 #1
det kunne hænge sammen med at der i din database kun bliver reg. heltal og ikke kommatal, desuden kunne jeg forstille mig at du skal bruge . i stedet for , til dine kommatal.
Avatar billede muffemand Nybegynder
31. august 2004 - 17:35 #2
Men stadigvæk. Den kan jo godt forstå kommatallene osv., når det f.eks., som jeg også skriver, er gennemsnittet af 2 og 3.
Avatar billede tjaz Nybegynder
31. august 2004 - 17:43 #3
ja... men hvis du vælge en karakter som er:

2 og 3, som jo giver 5 dividere den med 2 og skriver 2,5 ... hvad hvis du vælger 2,5 og 4,5 som giver 7 skriver den så 3,5 eller skriver den 3, som er gennemsnittet af 6 som er summen af de første 2 tal før kommaet?
Avatar billede muffemand Nybegynder
31. august 2004 - 17:47 #4
Hey, det har du egentlig ret i. Den skriver faktisk 3 :?
Hvad siger du så jeg skal gøre ?
Lave kommaet om til punktum i stedet, eller ændre i databasen (Som i øvrigt er valgt som number og long integer).
Avatar billede tjaz Nybegynder
31. august 2004 - 17:55 #5
Du skal nok bruge . i stedet for ,

Hvad den skal stå til i DB ved jeg ikke helt ... du bruger access ikke ?
Avatar billede muffemand Nybegynder
31. august 2004 - 17:56 #6
Jo...
Men jeg prøver lige, og så skriver jeg tilbage.
Avatar billede muffemand Nybegynder
31. august 2004 - 18:00 #7
Hmmm, det ser ikke ud til at virke.
Det er ligesom om den bare undlader punktummet, så der i stedet for 2.5 f.eks. kommer til at stå 25 :(
Avatar billede cpufan Juniormester
31. august 2004 - 21:00 #8
i access skal du definere kolonnen som et tal med decimaler, kan ikke huske hvad de kalder det i access, men du må prøve at ændre inde i din db.
kan hedde en float eller en double, men jeg tror de kalder det noget helt tredie.
Avatar billede muffemand Nybegynder
31. august 2004 - 23:56 #9
Det var en double :)
Takker
Avatar billede tjaz Nybegynder
01. september 2004 - 08:11 #10
Smider da lige et svar hvis du mener at du kunne bruge det til noget :)
Avatar billede tjaz Nybegynder
03. december 2004 - 16:13 #11
Luk spm?
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Kurser inden for grundlæggende programmering

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester