Seite 2 von 2

Verfasst: 14.04.2006 12:04
von AND51
Noch kürzer als deines, MXVA:

Code: Alles auswählen

Procedure.b isNaN(number.s)
	Protected n.l
	For n=1 To Len(number)
		If Asc(Mid(number, n, 1)) < 48 Or Asc(Mid(number, n, 1)) > 57
			ProcedureReturn 1
		EndIf
	Next
EndProcedure
Debug isNaN("56")
JavaScript-importiert; dort steht NaN für Not a Number, deutsch: keine Zahl.

Wenn die Procedure 1 zurückgibt, dann ist der String NaN, wenn die Procedure 0 zurückgibt, ist der String nicht NaN, also doch eine Zahl.

Verfasst: 14.04.2006 12:11
von Kaeru Gaman
wenn du NaN wills, geh doch zu Java... in Basic heis dat isNumeric.. :p

Verfasst: 14.04.2006 12:15
von AND51
AND51 hat geschrieben:JavaScript-importiert
Ich will nicht zu JavaScript. Und wenn ich nicht zu JavaScript komme, muss JS eben zu PB kommen. <)

Verfasst: 14.04.2006 12:20
von Kaeru Gaman
:mrgreen: :roll:

..der punkt bei der sache ist einfach, dass die rückgabe von NaN gerade umgekehrt ist wie die von isNum

ich bin dagegen, sowas upzumixen, das stiftet nur verwirrung.

von daher, nenn deine Proc isNum* und vertausch True und False, dann isses ok.

* oder irgendwie

Verfasst: 14.04.2006 12:26
von AND51
Ich finde das nicht unbedingt verwirrend:

Wenn ich Frage: Ist das hier numerisch (-> IsNum), dann weiß ich doch, dass ich ein ja (True) bekommen muss.

Wenn ich jedoch Frage: Ist das hier keine Zahl (->isNaN), dann kriege ich auch ein ja.

Mir ist schon klar, dass ich den Sachverhalt nicht umkrempeln kann, sodass alle jetzt auf isNaN umsteigen... Will ich auch gar nicht.

Verfasst: 14.04.2006 12:38
von Kaeru Gaman
ich mein, is mir doch banane, du machst ja eh was de willst...

aber der thread heißt:
> Festellen, ob ein String nur Zahlen enthält

...und da liefert deine proc stets das falsche ergebnis..

ich finds halt a bissel sinnlos, damit zu prahlen, dass man weiß wies in JS heißt,
wenn man andere Anfänger damit nur verwirren kann...

...und grad wird ach a bissel sinnlos, das totzudiskutieren... ich bin raus...

Verfasst: 14.04.2006 20:05
von MVXA
Und das hier ist schneller :P

Code: Alles auswählen

Procedure.l isNumeric(*pString.Byte)
   Protected lResult.l
   
    If (*pString\b&$FF = '+') Or (*pString\b&$FF = '-')
        *pString + 1
    EndIf
   
    While *pString\b&$FF
        If ((*pString\b < '0') Or (*pString\b > '9'))
            ProcedureReturn #False
        EndIf
        ;*---
        *pString + 1
    Wend
   
    ProcedureReturn #True
EndProcedure

Debug isNumeric(@"123423 ich bin schneller 1234324")
Debug isNumeric(@"56")
Debug isNumeric(@"-56")
Debug isNumeric(@"+56")
Debug isNumeric(@"56+56")