diff options
-rw-r--r-- | _test/test_float.py | 4 | ||||
-rw-r--r-- | representer.py | 4 | ||||
-rw-r--r-- | resolver.py | 2 |
3 files changed, 7 insertions, 3 deletions
diff --git a/_test/test_float.py b/_test/test_float.py index 2012b15..1f104f3 100644 --- a/_test/test_float.py +++ b/_test/test_float.py @@ -22,6 +22,8 @@ class TestFloat: - -42. - +42. - .5 + - +.5 + - -.5 """) print(data) assert 0.999 < data[0] < 1.001 @@ -34,6 +36,8 @@ class TestFloat: assert 41.999 < -data[7] < 42.001 assert 41.999 < data[8] < 42.001 assert .49 < data[9] < .51 + assert .49 < data[10] < .51 + assert -.51 < data[11] < -.49 def test_round_trip_zeros_0(self): data = round_trip("""\ diff --git a/representer.py b/representer.py index 6bd5651..dba7901 100644 --- a/representer.py +++ b/representer.py @@ -788,13 +788,13 @@ class RoundTripRepresenter(SafeRepresenter): elif data._exp is None: # no exponent, "normal" dot prec = data._prec - if prec < 1: - prec = 1 ms = data._m_sign if data._m_sign else "" # -1 for the dot value = u'{}{:0{}.{}f}'.format( ms, abs(data), data._width - len(ms), data._width - prec - 1 ) + if prec == 0 or (prec == 1 and ms != ""): + value = value.replace(u'0.', u'.') while len(value) < data._width: value += u'0' else: diff --git a/resolver.py b/resolver.py index bada11e..2641a54 100644 --- a/resolver.py +++ b/resolver.py @@ -38,7 +38,7 @@ implicit_resolvers = [ RegExp(u'''^(?: [-+]?(?:[0-9][0-9_]*)\\.[0-9_]*(?:[eE][-+]?[0-9]+)? |[-+]?(?:[0-9][0-9_]*)(?:[eE][-+]?[0-9]+) - |\\.[0-9_]+(?:[eE][-+][0-9]+)? + |[-+]?\\.[0-9_]+(?:[eE][-+][0-9]+)? |[-+]?\\.(?:inf|Inf|INF) |\\.(?:nan|NaN|NAN))$''', re.X), list(u'-+0123456789.')), |