diff --git a/parser.go b/parser.go index 8f867ca..09414d6 100644 --- a/parser.go +++ b/parser.go @@ -1056,7 +1056,7 @@ func (p *parser) parseTime(b []byte) ([]byte, error) { func (p *parser) scanIntOrFloat(b []byte) (ast.Reference, []byte, error) { i := 0 - if len(b) > 2 && b[0] == '0' { + if len(b) > 2 && b[0] == '0' && b[1] != '.' { var isValidRune validRuneFn switch b[1] { case 'x': diff --git a/parser_test.go b/parser_test.go index 0bd9be7..bdae78a 100644 --- a/parser_test.go +++ b/parser_test.go @@ -49,6 +49,21 @@ func TestParser_AST_Numbers(t *testing.T) { input: `0b11010110`, kind: ast.Integer, }, + { + desc: "float zero", + input: `0.0`, + kind: ast.Float, + }, + { + desc: "float positive zero", + input: `+0.0`, + kind: ast.Float, + }, + { + desc: "float negative zero", + input: `-0.0`, + kind: ast.Float, + }, { desc: "float pi", input: `3.1415`,