[ASP] IsNumeric geeft een error

Pagina: 1
Acties:

  • _Thanatos_
  • Registratie: Januari 2001
  • Laatst online: 06-03 20:19

_Thanatos_

Ja, en kaal

Topicstarter
Dit is echt heel onlogisch. Stel je de volgende code voor...
ASP:
1
2
Response.Write IsNumeric(Value)
Response.Write (IsNumeric(Value) And Value = 0)


De eerste regel poept keurignetjes False uit, want Value is een doodnormale string met wat letters erin. Maar nu wil ik controleren of diezelfde value 0 is, dus zet ik dat erbij. De tweede regel dus. Maar nu geeft ie ineens de fout Typen komen niet met elkaar overeen: 'IsNumeric(...)'.

Wat is voor IsNumeric nou het verschil tussen de twee? Het lijkt wel alsof je IsNumeric alleen maar zonder andere condities in een boolean expressie mag gebruiken. Ja, (Value = 0) geeft een error omdat Value niet numeriek is, maar daarom controleer ik dat ook. Dus waarom zou dit mis gaan??

[ Voor 2% gewijzigd door _Thanatos_ op 23-11-2005 15:24 . Reden: typo ]

日本!🎌


  • JKVA
  • Registratie: Januari 2004
  • Niet online

JKVA

Design-by-buzzword fanatic

Ehm, het is lang geleden dat ik met ASP gewerkt heb, dus het kan wel complete onzin zijn, maar...

Ik werk nu met Java en dan checkt hij de tweede waarde niet als de eerste al false is. Is dat in ASP ook zo? Het lijkt er niet op.

Oplossing: maak twee geneste ifs en zet de tweede conditie in de laatste.

Fat Pizza's pizza, they are big and they are cheezy


  • Nvidiot
  • Registratie: Mei 2003
  • Laatst online: 11-01 23:32

Nvidiot

notepad!

value zal wel een string zijn, en die moet je dus eerst naar bijvoorbeeld een integer converteren voordat je hem met het getal 0 kunt vergelijken. :)

What a caterpillar calls the end, the rest of the world calls a butterfly. (Lao-Tze)


  • JKVA
  • Registratie: Januari 2004
  • Niet online

JKVA

Design-by-buzzword fanatic

_Thanatos_ schreef op woensdag 23 november 2005 @ 15:23:
ASP:
1
2
Response.Write IsNumeric(Value)
Response.Write (IsNumeric(Value) And Value = 0)
Dus

ASP:
1
2
if IsNumeric(Value) then Response.Write Value = 0
else Response.Write FALSE


Aub niet over de syntax vallen, die ben ik ongeveer al vergeten. 8)7

Fat Pizza's pizza, they are big and they are cheezy


  • _Thanatos_
  • Registratie: Januari 2001
  • Laatst online: 06-03 20:19

_Thanatos_

Ja, en kaal

Topicstarter
Mja dat zou kunnen inderdaad, "complete boolean eval" noemt Borland het. Kennelijk doet VBscript daar niet aan... over het algemeen is dat *heel* erg slecht omdat je dan dit soort dingen kan krijgen.

Maar dan nog, als je een string vergelijkt met een integer, waarom probeert ie dan de string naar een integer te converteren (wat niet lukt, getuige de error) en niet de integer naar een string? want dat laatste zou wel lukken en False opleveren :)

En nee, als je Value=0 omschrijft naar 0=Value, probeert ie dus nog steeds Value naar een integer om te zetten |:(

[ Voor 15% gewijzigd door _Thanatos_ op 23-11-2005 15:38 ]

日本!🎌


  • RayNbow
  • Registratie: Maart 2003
  • Laatst online: 22:21

RayNbow

Kirika <3

JKVA schreef op woensdag 23 november 2005 @ 15:26:
Ik werk nu met Java en dan checkt hij de tweede waarde niet als de eerste al false is. Is dat in ASP ook zo? Het lijkt er niet op.
VB t/m versie 6 en VBScript kennen idd geen short circuit And en Or, oftewel de hele expressie wordt geevalueerd.

(VB.NET kent dit wel: AndAlso en OrElse zijn de short circuit operators)

Ipsa Scientia Potestas Est
NNID: ShinNoNoir


  • edie
  • Registratie: Februari 2002
  • Laatst online: 22:35
ASP kent geen short-circuit.

Alle voorwaarde worden gecontroleerd, ook al staat de uitkomst met de eerste conditie vast.

code:
1
2
If IsNumeric( Value ) And Value * 1 = 0 Then
End If

Dit geeft een fout wanneer Value geen nummertje is (of niet converteerbaar is naar een nummertje)

Zoals eerder gezegd: Geneste If's gebruiken...

"In America, consumption equals jobs. In these days, banks aren't lending us the money we need to buy the things we don't need to create the jobs we need to pay back the loans we can't afford." - Stephen Colbert


  • markvt
  • Registratie: Maart 2001
  • Laatst online: 17:19

markvt

Peppi Cola

Als ik deze code in vb gebruik, jouw code werkt niet omdat je variabele een string is, dit zou wel werken:

code:
1
2
3
4
5
6
7
8
9
<%
Value = "0"
' MsgBox IsNumeric(Value)
if IsNumeric(Value) then
    response.write(Value = 0)
else
    response.write(IsNumeric(Value))
end if
%>

van-tilburg.info -=- meka (sega emulator) - Proud MEDION fanclub member - KOPPIG VOLHOUDEN !


  • markvt
  • Registratie: Maart 2001
  • Laatst online: 17:19

markvt

Peppi Cola

RayNbow schreef op woensdag 23 november 2005 @ 15:37:
[...]

VB t/m versie 6 en VBScript kennen idd geen short circuit And en Or, oftewel de hele expressie wordt geevalueerd.

(VB.NET kent dit wel: AndAlso en OrElse zijn de short circuit operators)
VB6 met SP6 runt de code uit de TS wel goed overigens en geef netjes false ook al is de waarde van value "a"

code:
1
2
Value = "a"
MsgBox (IsNumeric(Value) And Value = 0)


Geeft netjes een messagebox met de waarde false in VB6

[ Voor 14% gewijzigd door markvt op 23-11-2005 15:42 ]

van-tilburg.info -=- meka (sega emulator) - Proud MEDION fanclub member - KOPPIG VOLHOUDEN !


  • RayNbow
  • Registratie: Maart 2003
  • Laatst online: 22:21

RayNbow

Kirika <3

markvt schreef op woensdag 23 november 2005 @ 15:41:
[...]


VB6 met SP6 runt de code uit de TS wel goed overigens en geef netjes false ook al is de waarde van value "a"

code:
1
2
Value = "a"
MsgBox (IsNumeric(Value) And Value = 0)


Geeft netjes een messagebox met de waarde false in VB6
Maar VB6 evalueert wel Value = 0.

Ipsa Scientia Potestas Est
NNID: ShinNoNoir

Pagina: 1