Avatar billede lund_dk Praktikant
09. august 2005 - 10:09 Der er 21 kommentarer og
1 løsning

ganger forkert

hej

jeg har en funktion som skal gange pris med antal. Dvs. har denne når jeg tilføjer til databasen:
rs1("VareSum") = rs("pris") * request.form("Antal")

Hvis varesummen har kommatal, dvs, eks. 5,50 kr., og antal er 1, så gemmer den kun 5,00 kr. Dvs. den ikke tager den halve med, det gør aldrig ved halve, enten runder den op eller ned til hele tal. Hvordan undgår jeg dette ?
Avatar billede busschou Praktikant
09. august 2005 - 10:25 #1
prøv med
rs1("VareSum") = FormatNumber(rs("pris"),2) * FormatNumber(request.form("Antal"),2)
Avatar billede busschou Praktikant
09. august 2005 - 10:28 #2
Jeg er ikke helt med på hvilken det er
Men FormatNumber gør i alt fald at tallet har to decimaler :o)
Så kan det jo sættes på hvor det passer
Avatar billede softspot Forsker
09. august 2005 - 10:39 #3
Jeg skulle også mene at

CDbl(rs("pris")) * CDbl(request.form("antal"))

kunne gøre tricket.
Avatar billede lund_dk Praktikant
09. august 2005 - 10:45 #4
Giver desværre samme resultat :(
Avatar billede diggerx Nybegynder
09. august 2005 - 11:01 #5
Har du tjekket om det står som kommatal i databasen?
Avatar billede lund_dk Praktikant
09. august 2005 - 11:08 #6
ja i databasen står de som kommatal.
Avatar billede Spotgun Seniormester
09. august 2005 - 14:16 #7
Prøv noget ala det her:
rs1("VareSum") = CDbl(Replace(rs("pris"), ",", ".")) * request.form("Antal")

Mener at ASP helst vil se kommatal på den amerikanske facon, med . som decimal-seperator i stedet for ,
Avatar billede lund_dk Praktikant
09. august 2005 - 14:21 #8
vi er på rette spor, spotgu, dog er mit resultat nu 65,00 hvor min sum er 6,50 og 1 antal, så vi skal lige have rykket kommaet en tak til venstre ?
Avatar billede softspot Forsker
09. august 2005 - 15:25 #9
Det er fordi CDbl er afhængig af "regional settings" - som nok er danske på din server, derfor skal det være omvendt, altså udskift punktum med komma...
Avatar billede lund_dk Praktikant
09. august 2005 - 15:27 #10
Bytter jeg så om, så er vi ved samme problem fra start, at den runder op eller ned til hele tal :(
Avatar billede softspot Forsker
09. august 2005 - 15:36 #11
Ja, men jeg mener stadig det er det rigtige format, for den løsning spotgun kom med satte blot en tusindskil ind i stedet for komma. Du skal stadig adressere problemet med typekonvertering af operatorer i din multiplikation. Prøv evt.:

res = 0.0
res = cdbl(rs("pris")) * cdbl(request.form("antal"))

Grunden til at jeg tildeler 0.0 til at starte med er et forsøg på at sætte subtypen af varianten res (alle variabel i VBScript er varianter :)) til en double inden beregningen (prøv evt. at udskrive typename(res) inden og efter beregningen).

Hvis det ikke fungerer så prøv:

res = cdbl(cdbl(rs("pris")) * cdbl(request.form("antal")))

der konverterer hver enkel operator og derefter hele mellemregningen inden det kommer i variabelen res.
Avatar billede lund_dk Praktikant
10. august 2005 - 17:03 #12
Nææh, intet lader til at virke :(
Avatar billede lund_dk Praktikant
16. august 2005 - 09:38 #13
Ikke andre bud ?
Avatar billede softspot Forsker
16. august 2005 - 11:33 #14
Kan du prøve at vise lidt mere (af den faktisk kørende) kode? Det kunne være spændende at se om der var nogle andre faktorer som kunne have indvirkning på hvordan resultatet bliver fortolket (selvom jeg ikke lige kan komme i tanke om hvad det skulle være...).
Avatar billede diggerx Nybegynder
16. august 2005 - 12:45 #15
Det er vel ikke en sql server hvor værdien i databasen er defineret som float? I så fald kan man ikke gange med det uden at lave nogen workarounds
Avatar billede lund_dk Praktikant
16. august 2005 - 14:03 #16
Gemmer i Access database:
Tager prisen og ganger med antal.
Pris er angivet i tal: 6,5 , antal i tele tal: 1
-----------------------
Set rs1 = Server.CreateObject("ADODB.Recordset")
strSQL = "select * from kob"
rs1.Open strsql, conn, 1, 3

rs1.AddNew
rs1("VareID") = rs("id")
rs1("VareNavn") = rs("navn")
rs1("vareBeskrivelse") = rs("beskrivelse")
' ### HER
rs1("VarePris") = FormatNumber(rs("pris"),2)
rs1("VareSum") = rs("pris") * request.form("Antal")
' ###
rs1("VareVaegt") = rs("vaegt") * request.form("Antal")
rs1("VareAntal") = request.form("Antal")
rs1("VareUdvidet") = request.form("Udvidet")
rs1("SessionID") = Session.SessionID
rs1.update
Avatar billede softspot Forsker
16. august 2005 - 14:53 #17
hvilken datatype har VareSum?
Avatar billede lund_dk Praktikant
16. august 2005 - 17:24 #18
Det er af typen: valuta
Og antal er af typen: tal
Avatar billede softspot Forsker
16. august 2005 - 17:46 #19
Prøv med:

rs1("VareSum") = CCur(CDbl(rs("pris")) * CDbl(request.form("Antal")))
Avatar billede lund_dk Praktikant
16. august 2005 - 17:49 #20
softspot: Efter et nærmere kig, så er netop lige VareSum IKKE valuta, men tal, så er jo der hele problemet har ligget og jeg har overset ..
Men tak for hjælpen, smid et svar :)
Avatar billede softspot Forsker
16. august 2005 - 17:53 #21
Ja, test er godt, test er godt, test er godt (det er mit lille mantra ;))...

Godt du fandt frem til kilden :)
Avatar billede softspot Forsker
16. august 2005 - 17:56 #22
Takker for point :)
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