RosettaCodeData/Task/Determine-if-a-string-is-numeric/M2000-Interpreter/determine-if-a-string-is-numeric-1.m2000
2023-07-01 13:44:08 -04:00

33 lines
1.6 KiB
Text

\\ version 2
Module Checkit {
function global isNumber(a$, de$=".") {
=false=true ' return boolean
if de$="" then de$=str$(.1,".") ' get current decimal point character
a$=trim$(ucase$(a$))
m=len(a$)
if m=0 then exit
c$=filter$(a$,"0123456789")
if c$ = "" then {
=true
} else.if m>1 then {
\ may have -+ and ,
if m=2 then {
if not c$~"[-+\"+de$+"]" then break
} else {
if left$(c$,1 ) ~"[+-]" then c$=mid$(c$, 2)
if not (c$=de$ or c$=de$+"E" or c$ ~ de$+"E[+-]") then break
if c$ ~ de$+"E[+-]" then if not (instr(a$,"E+")>0 or instr(a$,"E-")>0) then break
}
if de$<>"." then a$=replace$(de$, ".", a$, 1,1)
try {inline "a="+a$+"=="+a$}
if valid(a) then =a = true=true ' return boolean
}
}
Print isNumber("+1"), isnumber("-1"), isNumber("1+")=false, isnumber("1-")=false
Print isNumber(",1",","), isnumber("1,",","), isNumber(",0",","), isnumber("0,", ",")
Print isNumber(".1"), isnumber("1."), isNumber(".0"), isnumber("0.")
Print isNumber("+.1"), isnumber("-1."), isNumber(".12e+232"), isnumber("0.122e10")
Print isNumber("+.1a")=false, isnumber("asasa1212")=false, isNumber("1.2e43+23")=false, isnumber("0.122e10")
Print isNumber("1221.211.1221")=false, isnumber("1221e1212")=false, isNumber("1.2e4323")=false, isnumber("-.122e-10")
}
Checkit