require numeric literals to begin and end with a digit/decimal point so that stuff like "," and "1," don't parse as numbers
parent
d2bef9e32a
commit
1a04bc1124
|
@ -25,13 +25,18 @@ unit-test
|
||||||
[ "e" string>number ]
|
[ "e" string>number ]
|
||||||
unit-test
|
unit-test
|
||||||
|
|
||||||
[ 100000 ]
|
[ 100000 ] [ "100,000" string>number ] unit-test
|
||||||
[ "100,000" string>number ]
|
|
||||||
unit-test
|
|
||||||
|
|
||||||
[ 100000.0 ]
|
[ 100000.0 ] [ "100,000.0" string>number ] unit-test
|
||||||
[ "100,000.0" string>number ]
|
|
||||||
unit-test
|
[ f ] [ "," string>number ] unit-test
|
||||||
|
[ f ] [ "-," string>number ] unit-test
|
||||||
|
[ f ] [ "1," string>number ] unit-test
|
||||||
|
[ f ] [ "-1," string>number ] unit-test
|
||||||
|
[ f ] [ ",2" string>number ] unit-test
|
||||||
|
[ f ] [ "-,2" string>number ] unit-test
|
||||||
|
|
||||||
|
[ 2.0 ] [ "2." string>number ] unit-test
|
||||||
|
|
||||||
[ "100.0" ]
|
[ "100.0" ]
|
||||||
[ "1.0e2" string>number number>string ]
|
[ "1.0e2" string>number number>string ]
|
||||||
|
|
|
@ -86,16 +86,27 @@ SYMBOL: negative?
|
||||||
[ CHAR: , eq? not ] filter
|
[ CHAR: , eq? not ] filter
|
||||||
>byte-array 0 suffix (string>float) ;
|
>byte-array 0 suffix (string>float) ;
|
||||||
|
|
||||||
|
: number-char? ( char -- ? )
|
||||||
|
"0123456789." member? ;
|
||||||
|
|
||||||
|
: numeric-looking? ( str -- ? )
|
||||||
|
"-" ?head drop
|
||||||
|
dup empty? [ drop f ] [
|
||||||
|
dup first number-char? [
|
||||||
|
last number-char?
|
||||||
|
] [ drop f ] if
|
||||||
|
] if ;
|
||||||
|
|
||||||
PRIVATE>
|
PRIVATE>
|
||||||
|
|
||||||
: base> ( str radix -- n/f )
|
: base> ( str radix -- n/f )
|
||||||
over empty? [ 2drop f ] [
|
over numeric-looking? [
|
||||||
over [ "/." member? ] find nip {
|
over [ "/." member? ] find nip {
|
||||||
{ CHAR: / [ string>ratio ] }
|
{ CHAR: / [ string>ratio ] }
|
||||||
{ CHAR: . [ drop string>float ] }
|
{ CHAR: . [ drop string>float ] }
|
||||||
[ drop string>integer ]
|
[ drop string>integer ]
|
||||||
} case
|
} case
|
||||||
] if ;
|
] [ 2drop f ] if ;
|
||||||
|
|
||||||
: string>number ( str -- n/f ) 10 base> ;
|
: string>number ( str -- n/f ) 10 base> ;
|
||||||
: bin> ( str -- n/f ) 2 base> ;
|
: bin> ( str -- n/f ) 2 base> ;
|
||||||
|
|
Loading…
Reference in New Issue