Fix floating points with underscores
diff --git a/lexer_test.go b/lexer_test.go
index 82946bf..d8abb35 100644
--- a/lexer_test.go
+++ b/lexer_test.go
@@ -464,6 +464,13 @@
token{Position{1, 7}, tokenInteger, "1_2_3_4_5"},
token{Position{1, 16}, tokenEOF, ""},
})
+
+ testFlow(t, "flt8 = 9_224_617.445_991_228_313", []token{
+ token{Position{1, 1}, tokenKey, "flt8"},
+ token{Position{1, 6}, tokenEqual, "="},
+ token{Position{1, 8}, tokenFloat, "9_224_617.445_991_228_313"},
+ token{Position{1, 33}, tokenEOF, ""},
+ })
}
func TestMultiline(t *testing.T) {
diff --git a/parser.go b/parser.go
index 59f513b..7ba872b 100644
--- a/parser.go
+++ b/parser.go
@@ -231,7 +231,8 @@
}
return val
case tokenFloat:
- val, err := strconv.ParseFloat(tok.val, 64)
+ cleanedVal := strings.Replace(tok.val, "_", "", -1)
+ val, err := strconv.ParseFloat(cleanedVal, 64)
if err != nil {
p.raiseError(tok, "%s", err)
}
diff --git a/parser_test.go b/parser_test.go
index ebf1626..94308a4 100644
--- a/parser_test.go
+++ b/parser_test.go
@@ -68,7 +68,7 @@
})
}
-func TestIntegersWithUnderscores(t *testing.T) {
+func TestNumbersWithUnderscores(t *testing.T) {
tree, err := Load("a = 1_000")
assertTree(t, tree, err, map[string]interface{}{
"a": int64(1000),
@@ -83,6 +83,16 @@
assertTree(t, tree, err, map[string]interface{}{
"a": int64(12345),
})
+
+ tree, err = Load("flt8 = 9_224_617.445_991_228_313")
+ assertTree(t, tree, err, map[string]interface{}{
+ "flt8": float64(9224617.445991228313),
+ })
+
+ tree, err = Load("flt9 = 1e1_00")
+ assertTree(t, tree, err, map[string]interface{}{
+ "flt9": float64(1e100),
+ })
}
func TestFloatsWithExponents(t *testing.T) {