这是我用来检测字串是否能用Val()精准转换数字的代码
PARAMETERS str
PRIVATE tmp
IF EMPTY(str)
RETURN .t.
ENDIF
tmp=OCCURS("-",ALLTRIM(str))
DO CASE
CASE tmp>1
RETURN .f.
CASE tmp=1
IF LEFT(ALLTRIM(str),1)<>"-"
RETURN .f.
ENDIF
ENDCASE
tmp=OCCURS("+",ALLTRIM(str))
DO CASE
CASE tmp>1
RETURN .f.
CASE tmp=1
IF LEFT(ALLTRIM(str),1)<>"+"
RETURN .f.
ENDIF
ENDCASE
IF OCCURS(".",ALLTRIM(str))>1
RETURN .f.
ENDIF
IF OCCURS(" ",ALLTRIM(str))>0
RETURN .f.
ENDIF
IF EMPTY(CHRTRAN(ALLTRIM(str), '+|-|.|0|1|2|3|4|5|6|7|8|9', ''))
RETURN .t.
ELSE
RETURN .f.
ENDIF
PARAMETERS str
PRIVATE tmp
IF EMPTY(str)
RETURN .t.
ENDIF
tmp=OCCURS("-",ALLTRIM(str))
DO CASE
CASE tmp>1
RETURN .f.
CASE tmp=1
IF LEFT(ALLTRIM(str),1)<>"-"
RETURN .f.
ENDIF
ENDCASE
tmp=OCCURS("+",ALLTRIM(str))
DO CASE
CASE tmp>1
RETURN .f.
CASE tmp=1
IF LEFT(ALLTRIM(str),1)<>"+"
RETURN .f.
ENDIF
ENDCASE
IF OCCURS(".",ALLTRIM(str))>1
RETURN .f.
ENDIF
IF OCCURS(" ",ALLTRIM(str))>0
RETURN .f.
ENDIF
IF EMPTY(CHRTRAN(ALLTRIM(str), '+|-|.|0|1|2|3|4|5|6|7|8|9', ''))
RETURN .t.
ELSE
RETURN .f.
ENDIF