Pagina 1 di 2 1 2 ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 19

Discussione: Follie dell'ASP???

  1. #1
    Utente di HTML.it
    Registrato dal
    Oct 2004
    Messaggi
    7

    Follie dell'ASP???

    Salve a tutti,
    sono nuovo qui, e forse tra di voi c'e' qualcuno in grado di darmi una spiegazione di questo fenomeno. Sembra che in qualche caso,
    ASP abbia dei grossi problemi nel confrontare due valori...
    E' piu' facile vederlo che spiegarlo, credo.

    Questo e' il codice di prova (semplicissimo!)

    Ovviamente ho trovato un workaround per questo problema,
    ma mi piacerebbe capire il perche' di questo comportamento.

    Grazie molte


    <html>
    <head>
    </head>
    <body>

    <%
    if request("valore1") <> "" then

    v1 = request("valore1") // leggo la variabile valore1
    v2 = 200 // set v2 = 200 (puo' essere qyalunque valore)

    response.write "V1 è il valore che è stato inserito nel form precedente, e vale "&v1
    response.write "
    V2 è una costante che vale "&v2
    response.write "
    Se moltiplichiamo V1 * 2 otteniamo " & v1*2
    response.write "
    Se moltiplichiamo V2 * 2 otteniamo " & v2*2
    response.write "
    Quindi i due valori sono entrambi numerici e correttamente gestiti come tali"
    response.write "
    ma, se confrontiamo V1 e V2, il test dice che"

    if v1 < v2 then
    response.write "
    V1 < V2"
    end if
    if v1 = v2 then
    response.write "
    V1 = V2"
    end if
    if v1 > v2 then
    response.write "
    V1 > V2"
    end if

    response.write "

    Come mai???"
    else
    %>
    <FORM NAME="test" method="get" action="#">
    <TABLE BORDER CELLPADDING=3>
    <TR>
    <TD>V1</TD>
    <TD BGCOLOR="d0d0d0">Valore:</TD>
    <TD BGCOLOR="d0d0d0">
    <INPUT TYPE=text NAME="valore1" SIZE=12>
    </TD></TR>


    <TR>
    <TD></TD>
    <TD BGCOLOR="d0d0d0"></TD>
    <TD BGCOLOR="d0d0d0">
    <INPUT TYPE="submit" value="test" >
    </TD></TR>

    </TABLE>
    </FORM>

    <% end if %>
    </body>
    </html>

  2. #2
    non funziona semplicemente perchè v1 è stringa e v2 è numerico
    mettici

    v1 = clng(request("valore1"))

    o

    v1 = cdbl(request("valore1"))


  3. #3
    Utente di HTML.it L'avatar di 99eros9
    Registrato dal
    Jan 2003
    Messaggi
    2,637
    sei convinto che v1 sia numerico senza fare il typecasting?
    Quello è ancora una stringa e devi usare "cInt"
    Tala är silver men tiga är guld!
    Pubblica il tuo curriculum
    Segnala il tuo sito
    Ancl

  4. #4
    Utente di HTML.it
    Registrato dal
    Oct 2004
    Messaggi
    7
    Grazie per le risposte!
    In effetti, avevo il sospetto di quale fosse la natura del problema.
    Quello che non capisco è perché in altri contesti riesce da solo a fare il typecast.

    Ad esempio, se moltiplico (sommo, divido, o qualsiasi altra operazione) v1 (come stringa, senza typecast), il risultato è corretto (come nell'esempio), mentre se la stessa operazione la faccio all'interno dell'if
    ( if (v1*2) <> (v2*2) ) la cosa non funziona più.

    E ancora, la "stringa" v1 riprende a dare risultati corretti
    se il test di uguaglianza lo faccio con un and booleano tra v1 e v2,
    o più semplicemente controllando che la differenza tra v1 e v2 sia zero (cioe' if (v1-v2) = 0) ...

    Insomma, non è completamente logico, no?

  5. #5
    si e no... il fatto e' che in vbs le variabili sono solo Variant. Il casting automatico non sempre funziona, per cui se vuoi essere sicuro, forza sempre il casting.

  6. #6
    Utente di HTML.it L'avatar di 99eros9
    Registrato dal
    Jan 2003
    Messaggi
    2,637
    potresti provare ad assegnare il risultato di ciascuna moltiplicazione a due altre variabili e confrontare quelle due... tanto per sfizio.
    Probabilmente nel modo che hai fatto te si incasina perchè il risultato che deve restituire è booleano
    Tala är silver men tiga är guld!
    Pubblica il tuo curriculum
    Segnala il tuo sito
    Ancl

  7. #7
    Utente di HTML.it
    Registrato dal
    Oct 2004
    Messaggi
    7
    Si, è proprio così.
    Comunque mi è servito a capire che non devo mai fare affidamento sul casting automatico, ed esplicitare il tipo di ogni variabile usata (sempre un'ottima abitudine) in ogni caso; anche se sono convinto che debba esistere una tabella con le regole di applicazione del casting automatico tra i vari tipi e operazioni.
    Grazie di nuovo, ragazzi

  8. #8
    Utente di HTML.it L'avatar di 99eros9
    Registrato dal
    Jan 2003
    Messaggi
    2,637
    non credo ormai serva più perchè asp3.0 è stato abbandonato per la .net e li viene esplicitato anche il billo
    Tala är silver men tiga är guld!
    Pubblica il tuo curriculum
    Segnala il tuo sito
    Ancl

  9. #9
    Originariamente inviato da 99eros9
    non credo ormai serva più perchè asp3.0 è stato abbandonato per la .net....
    se lo dici tu...

  10. #10
    Utente di HTML.it L'avatar di 99eros9
    Registrato dal
    Jan 2003
    Messaggi
    2,637
    bhè, io intendevo lo sviluppo da parte di M$... non che ne vada particolarmente fiero, però
    Tala är silver men tiga är guld!
    Pubblica il tuo curriculum
    Segnala il tuo sito
    Ancl

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.