diff --git a/luadata/serializer/__test__.py b/luadata/serializer/__test__.py index 3f6a990..82d9cf2 100644 --- a/luadata/serializer/__test__.py +++ b/luadata/serializer/__test__.py @@ -100,6 +100,7 @@ def test_number(self): self.assertEqual(unserialize("-0.1"), -0.1) self.assertEqual(unserialize("-100"), -100) self.assertEqual(unserialize("-100."), -100) + self.assertEqual(unserialize("1e-06"), 1e-06) def test_tuple(self): self.assertEqual(unserialize("1,2,3"), 1) diff --git a/luadata/serializer/unserialize.py b/luadata/serializer/unserialize.py index eb45d5a..993a8b7 100644 --- a/luadata/serializer/unserialize.py +++ b/luadata/serializer/unserialize.py @@ -182,7 +182,7 @@ def node_to_table(node): key = None data = None elif state == "INT": - if byte_current == b".": + if byte_current == b"." or byte_current == b"e": state = "FLOAT" elif byte_current is None or byte_current < b"0" or byte_current > b"9": data = int(sbins[pos1:pos].decode(encoding)) @@ -197,7 +197,9 @@ def node_to_table(node): pos = pos - 1 data = None elif state == "FLOAT": - if byte_current is None or byte_current < b"0" or byte_current > b"9": + if byte_current == b"e" or byte_current == b"-" or byte_current == b"+": + pass + elif byte_current is None or byte_current < b"0" or byte_current > b"9": if pos == pos1 + 1 and sbins[pos1:pos] == b".": errmsg = "unexpected dot." break