Avatar billede lars_munk Nybegynder
06. maj 2002 - 19:04 Der er 46 kommentarer og
2 løsninger

String til Integer

Hej folks
Jeg har lige problem, som jeg håber I kan hjælpe mig med:

Jeg skal gange 2 tal, der bliver overført fra et xml dokument via en form. Problemet er ikke at få tallene overført, men derimod at få dem ganget sammen. Hver gang kommer fejlen: Typerne passer ikke sammen. Jeg fandt et script der kunne fortælle hvilken type der ligger i variablerne og det fortæller mig der ligger strenge selvom det er ganske almindelig tal som 2 og 499. Er der nogen har har en løsning ligger der 200p og venter...

/Lars Munk
Avatar billede keysersoze Ekspert
06. maj 2002 - 19:07 #1
ved ikke hvordan du importerer dem - men prøv fx;

var1 = dinværdi1
var2 = dinværdi2

res = int(var1) * int (var2)
Avatar billede invisibleman Nybegynder
06. maj 2002 - 19:10 #2
200 point er ALT for meget til det spørgsmål ...
Avatar billede wilweb Nybegynder
06. maj 2002 - 19:12 #3
tTal1 = request.form("Tal1")
tTal2 = request.form("Tal2")

tRes = CInt(tTal1) * CInt(tTal2)
Avatar billede Slettet bruger
06. maj 2002 - 19:12 #4
invisibleman>Og? han kan jo ikke tage dem tilbage. Spørgsmålet er udbudt til 200.
Avatar billede wilweb Nybegynder
06. maj 2002 - 19:13 #5
invisibleman har ret 200 point er for meget!
Avatar billede wilweb Nybegynder
06. maj 2002 - 19:15 #6
Men det handler om at lars_munk skal være tilfreds! så han bestemmer jo
:> Gizom
Avatar billede lars_munk Nybegynder
06. maj 2002 - 19:15 #7
Jeg er nu ligeglad med de points. Jeg vil egentlig bare have klaret mit problem...
-->keysersoze: Stadig samme fejlmeddelse
-->gizom: Typerne passer ikke sammen: 'CInt'
Avatar billede lars_munk Nybegynder
06. maj 2002 - 19:17 #8
Jeg har faktisk prøvet begge forslag. Jeg har også prøve at oprette sessionsvariabler, men typerne passer stadig ikke sammen...
Avatar billede wilweb Nybegynder
06. maj 2002 - 19:23 #9
for at teste om om det er integer skal du bruge: Typename

MyType = TypeName("VBScript")  ' Returns "String".
MyType = TypeName(4)            ' Returns "Integer".
MyType = TypeName(37.50)        ' Returns "Double".
MyType = TypeName(NullVar)      ' Returns "Null".
MyType = TypeName(ArrayVar)    ' Returns "Variant()".
Avatar billede wilweb Nybegynder
06. maj 2002 - 19:30 #10
Måske sådanne!
if MyType1 = "Integer" and MyType2 = "Integer" then
tTal1 = Cint(MyType1)
tTal2 = Cint(MyType2)
else
'hvad skal der ske hvis det ikke er integer
end if

tRes = MyType1 * MyType2

Response.write tRes
Avatar billede wilweb Nybegynder
06. maj 2002 - 19:35 #11
CInt Function
Returns an expression that has been converted to a Variant of subtype Integer.
Derfor må CInt(MyType1) også indholde værdien i Integer, eller hur?
Avatar billede rune_c Nybegynder
06. maj 2002 - 19:38 #12
Her er et eksempel:

<%
dim t1, t2
t1 = "4"
t2 = "5"
response.write typename(t1) &"<br>"& typename(t2) &"<br>"
t1 = cint(t1)
t2 = cint(t2)
response.write typename(t1) &"<br>"& typename(t2) &"<br>"
response.write (t1*t2)
%>
Avatar billede lars_munk Nybegynder
06. maj 2002 - 19:39 #13
Ja det ville jeg osse umiddelbart mene. Men nu har jeg siddet og gloet på dette problem temmelig længe samt testet din seneste mulighed, uden resultat...
Avatar billede lars_munk Nybegynder
06. maj 2002 - 19:42 #14
rune_c -->:Sorry. Den kommer bare igen med: Typerne passer ikke sammen: 'cint'
Avatar billede rune_c Nybegynder
06. maj 2002 - 19:43 #15
hmm din iis skræmmer for det virker 100% her. Har du prøvet at køre det jeg skrev helt for sig selv?
Avatar billede rune_c Nybegynder
06. maj 2002 - 19:44 #16
mit output er:

String
String
Integer
Integer
20

og det er jo som det skal være.
Avatar billede lars_munk Nybegynder
06. maj 2002 - 19:45 #17
Hmmm. Det er mit også. Hvad f***** sker der? Jeg bruger ikke IIS men PWS. Kan det have noget med det at gøre?
Avatar billede rune_c Nybegynder
06. maj 2002 - 19:48 #18
okay så er der sikkert et eller andet tegn i din variabel der ikke må være der. Prøv at udskrive de variabler der drejer sig om. Hvis der er andet end mellemrum, tal, et punktum eller et komma fucker cint op og siger type mismatch
Avatar billede wilweb Nybegynder
06. maj 2002 - 19:49 #19
Bælter og livrem!!1
Denne virker for mig..
<%
' kunne lige så godt være
'MyType1 = request.form("MyType1")
'MyType2 = request.form("MyType2")
MyType1 = "10"
MyType2 = "6"

if MyType1 <> "Integer" and MyType2 <> "Integer" then
  'hvad skal der ske hvis det ikke er integer
  tTal1 = Cint(MyType1)
  tTal2 = Cint(MyType2)
  tRes = tTal1 * tTal2
  Response.write tRes
else
  'hvad skal der ske hvis det er integer
  tRes = MyType1 * MyType2
  Response.write tRes
end if
%>
Avatar billede rune_c Nybegynder
06. maj 2002 - 19:51 #20
det er jo det samme som mit...du spilder bare plads ved at tjekke for om det er en integer. CInt virker også hvis der bliver parset en integer ind...
Avatar billede lars_munk Nybegynder
06. maj 2002 - 19:52 #21
rune_c -->Der udskrives tallene som var indeholder, men samtidig fortæller den osse (via et script) at der er tale om strenge...
Avatar billede wilweb Nybegynder
06. maj 2002 - 19:56 #22
rune_c: det var jo bare en fortsætter af mit svar:
Afvist svar fra gizom 06/05-2002 19:12:41
Avatar billede lars_munk Nybegynder
06. maj 2002 - 19:57 #23
rune_c--> Har fjernet kommentarene, sat dem et andet sted...Ellers er dit ex. her:

Den fatter ikke Cint...Typerne passer ikke sammen...Men det MÅ da være muligt at gange f.eks 3 med 449 og få det skrevet ud???

' kunne lige så godt være
MyType1 = request.form("antal")
MyType2 = request.form("pris")
'MyType1 = "10"
'MyType2 = "6"

if MyType1 <> "Integer" and MyType2 <> "Integer" then
  'hvad skal der ske hvis det ikke er integer
  tTal1 = Cint(MyType1)
  tTal2 = Cint(MyType2)
  tRes = tTal1 * tTal2
  Response.write tRes
else
  'hvad skal der ske hvis det er integer
  tRes = MyType1 * MyType2
  Response.write tRes
end if

%>
Avatar billede rune_c Nybegynder
06. maj 2002 - 19:58 #24
gizom>> det er da stadigvæk det samme bortset fra at dit tager længere tid at udføre

lars_munk>> hvis du ikke har noget imod det kan du evt. sende det stykke noget der ikke vil til mig så skal der lige kigge på det isd@mail.dk
Avatar billede rune_c Nybegynder
06. maj 2002 - 20:00 #25
prøv dette og drop det andet det tager meget længere tid at udføre:

<%
dim t1, t2
t1 = cint(request.form("antal"))
t2 = cint(request.form("pris"))

response.write (t1*t2)
%>
Avatar billede wilweb Nybegynder
06. maj 2002 - 20:07 #26
Hvis det du svarer er rigtigt så må mit svar (19:12:41):

tTal1 = request.form("Tal1")
tTal2 = request.form("Tal2")
tRes = CInt(tTal1) * CInt(tTal2)

Da også være rigtigt, bort set fra at jeg ikke:

Response.write tRes

Eller er det mig der er helt fra den?
Avatar billede lars_munk Nybegynder
06. maj 2002 - 20:11 #27
-->Løsninger er sikkert begge korrekte nok, men de virker ikke stadig ikke hos mig...sorry.
Avatar billede rune_c Nybegynder
06. maj 2002 - 20:11 #28
gizom>> Det virker også...da det er det samme som mit som lars_munk også har sagt virker hvis han sætter ttal1 og 2 til fx "4".
Cint virker bare ikke hvis der også er bogstaver i og jeg tror der er det i hans variabler..
Avatar billede rune_c Nybegynder
06. maj 2002 - 20:12 #29
prøv lige dette helt for sig selv i en fil der hedder test.asp ellers skal du lige ændre i formen:

<%
if request.queryString() = "1" then

dim t1, t2
t1 = request.form("Antal")
t2 = request.form("Pris")
response.write typename(t1) &"<br>"& typename(t2) &"<br>"
t1 = cint(t1)
t2 = cint(t2)
response.write typename(t1) &"<br>"& typename(t2) &"<br>"
response.write (t1*t2)
else
%>

<html>
<body>
<form action="test.asp?1" method="post">
<input type="text" name="Antal"><br>
<input type="text" name="Pris"><br>
<input type="submit">
</form>
</body>
</html>
<%
end if
%>
Avatar billede rune_c Nybegynder
06. maj 2002 - 20:16 #30
prøv lige at køre en isnumeric() på dine variabler. Hvis den er false er det derfor, men hvis den er true er jeg bange for din pws!! Husk at kommenterer linierne med cint
Avatar billede wilweb Nybegynder
06. maj 2002 - 20:57 #31
Her kommer du tilbage til din form, hvis et af de indtastede variabler er forskellige fra typen integer og ellers ganges de 2 tal.
Kan du bruge det?

<%
if request.queryString() = "1" then

    dim t1, t2, tRes
    t1 = request.form("Antal")
    t2 = request.form("Pris")
    If isnumeric(t1) <> true  then
        session("Antal") = "Forkert, Skal være et tal"
    elseif isnumeric(t2) <> true then
        session("Pris") = "Forkert, Skal være et tal"
    else

    tRes = CInt(t1) * CInt(t2)
    response.write (t1*t2)
    end if
end if
%>
<html>
<body>
<form action="test.asp?1" method="post">
  Antal
  <input type="text" name="Antal" value="<%=session("Antal")%>">
  <br>
  Pris&nbsp;&nbsp;
  <input type="text" name="Pris" value="<%=session("Pris")%>">
  <br>
  <input type="submit">
</form>

</body>
</html>
Avatar billede wilweb Nybegynder
06. maj 2002 - 21:01 #32
Brugeren bliver jo nød til at indtaste tal i de 2 input feltet, ellers må brugeren jo gøre det om igen. Vi ved jo ikke hvad en bruger evt. mener med et "qwerty" input!
Avatar billede rune_c Nybegynder
06. maj 2002 - 21:12 #33
det kunne også gøres med clientscript så man ikke brugte båndbrede på at sende unødvendig data..
Avatar billede wilweb Nybegynder
06. maj 2002 - 21:41 #34
lars_munk :> gik du kold?
Avatar billede -master-d- Nybegynder
06. maj 2002 - 22:17 #35
Prøv lige med
værdi1 sætter jeg til 5
og værdi2 sætter jeg til 3

Dim Var1, Int, Var2, Int2
Var1 = 5
Int = CInt(Var1) ' skulle gerne returnere værdien 5

Var2 = 3
Int2 = CInt(Var2) ' skulle gerne returnere værdien 3

response.write (Int*Int2)
'skulle jo gerne blive 15

Men prøv ellers læs lidt om funktionen CInt Her :
http://activedeveloper.dk/iishelp/vbscript/htm/vsfctcint.htm
Avatar billede -master-d- Nybegynder
06. maj 2002 - 22:28 #36
Eller

Dim Var1, Var2, gange
Var1 = 5
Var2 = 3
gange = (Cint(Var1) * Cint(Var2)

Response.Write gange
Avatar billede wilweb Nybegynder
06. maj 2002 - 22:28 #37
-master-d- :> problemer er jo at, hvis nu variablen fra formen var af typen string kan man jo ikke ret meget med CInt, andet end at få fejl.
Derfor er du nød til at teste om der er en string eller integer (jeg tester om det er en integer med isnumeric()), og hvis det er en string. Ja så skal brugeren tilbage til indtastningsformen, for at indtaste et korrekt tal.
Avatar billede sup Nybegynder
07. maj 2002 - 01:32 #38
Jeg ved ikke om dette løser dit problem. Men du kan hindre at
brugeren taster andet end tal inden formen bliver sendt.

Eksempel:

<INPUT name="antaldage" TYPE="TEXT" SIZE="3" maxlength="3" ONKEYPRESS="if ((event.keyCode < 48) || (event.keyCode > 57)) event.returnValue = false;">

Sup.
Avatar billede sup Nybegynder
07. maj 2002 - 01:33 #39
Jeg læste vist ikke hele spørgsmålet. Sorry :)
Avatar billede wilweb Nybegynder
07. maj 2002 - 14:33 #40
Takker :>Gizom
Avatar billede rune_c Nybegynder
08. maj 2002 - 20:25 #41
hmm folk der kommer og siger præcis det samme lang tid efter får points, mens jeg ikke skulle havde...tsk tsk..moralen her er dalende
Avatar billede wilweb Nybegynder
08. maj 2002 - 23:12 #42
Rune_c:> er det mig du mener?
Avatar billede rune_c Nybegynder
10. maj 2002 - 23:31 #43
gizom>> Nej da!! Du svarer før mig, men da han afviste det lavede jeg også et svar der var lidt anderledes.

Klokken 22:17:11 kommer -master-d- så og laver et svar der er præcis det samme som dit postet klokken 19:12:41 og mit postet klokken 19:38:57. Dvs. at han godt 3 timer senere laver et svar der er 100% magen til vores svar og alligevel får 100 points. Han laver altså et svar som vi andre skrev for 3 timer siden og i det tidsrum brugte vores tid på at finde ud af hvorfor det ikke virkede!

Jeg er ikke ude efter points og synes derfor at du burde have det alle pointene - for dit første svar! bestemt ikke det du fik points for - eller det skulle fordeles på os to. I teorien behøver han ikke at vide en skid til det overhovedet. I mit første svar skriver jeg noget kode som jeg senere bede ham prøve at udføre hvorefter han siger at det virker! -master-d- kan derfor faktisk bare at ændret variabelnavnene da han vidste at det virkede - jeg havde jo sagt det og lars_munk havde bekræftet det.

Noget andet der irriterer mig lidt er at jeg siger at han skal teste det med isnumeric() og ~40 minutter efter er du straks på banen med et nyt svar. Dit svar er en 99,9% kopi af det svar, jeg poster lige før jeg siger det med isnumeric(), med den forskel at du har smidt en isnumeric() ind..

Til sidst virker det lidt latterligt (og som om han intet ved om det) at -master-d- parser en integer ind i cint() og siger: "' skulle gerne returnere værdien 5". Den skulle ikke gerne! Den gør det! Han smider en integer i en funktion der skal ændre en string til en integer. Funktionen ændre da ikke en integer til en integer, men returnerer den bare med det samme!
Avatar billede wilweb Nybegynder
11. maj 2002 - 00:13 #44
rune_c:> jeg kan godt se hvad du mener. Jeg er den første der svarer og bringer CInt() på banen, du er først med isnummeric(), -master-d-  burde slet ikke have haft point, han siger kune hvad der i forvejen er sagt!! Jeg laver et spørgsmål, så kan vi dele de point jeg fik, ÅK fair nok? håber jeg?
:>Gizom
Avatar billede wilweb Nybegynder
11. maj 2002 - 00:15 #45
Avatar billede lars_munk Nybegynder
11. maj 2002 - 09:08 #46
Sorry hvis der er noget der ikke stemmer. Jeg er villig til at lave et spørgsmål så I begge kan få lidt xtra points. Har det interesse?

/Lars Munk
Avatar billede rune_c Nybegynder
11. maj 2002 - 09:45 #47
gizom>> Bare behold pointene. For mig handlede det bare om princippet
Avatar billede wilweb Nybegynder
11. maj 2002 - 10:02 #48
lars_munk:> Jeg har fået hvad der til kommer mig. -master-d- var nok lidt heldig i point uddelingen, for det han svarede var allerede svaret tidligere i spm'et af rune_c og jeg. Det skulle nok have været imellem rune_c og mig, at point'ene skulle være delt.

Det der ville være mest rigtigt var at -master-d- oprettede et spørgsmål på 100 point til rune_c for du har jo allerede betalt 200 point som du lovede for spm'et.

-master-d- :> Kan du se rigtigheden i problemstillingen? tid til at være fair!!
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