diff --git a/lib/ultrajson.h b/lib/ultrajson.h index 79abf1d..05e62a9 100644 --- a/lib/ultrajson.h +++ b/lib/ultrajson.h @@ -336,7 +336,7 @@ typedef struct __JSONObjectDecoder EXPORTFUNCTION JSOBJ JSON_DecodeObject(JSONObjectDecoder *dec, const char *buffer, size_t cbBuffer); #define DCONV_DECIMAL_IN_SHORTEST_LOW -6 -#define DCONV_DECIMAL_IN_SHORTEST_HIGH 21 +#define DCONV_DECIMAL_IN_SHORTEST_HIGH 16 enum dconv_d2s_flags { DCONV_D2S_NO_FLAGS = 0, diff --git a/python/objToJSON.c b/python/objToJSON.c index 7b11d57..b6ceff2 100644 --- a/python/objToJSON.c +++ b/python/objToJSON.c @@ -827,7 +827,7 @@ PyObject* objToJSON(PyObject* self, PyObject *args, PyObject *kwargs) } - dconv_d2s_init(DCONV_D2S_EMIT_TRAILING_DECIMAL_POINT | DCONV_D2S_EMIT_TRAILING_ZERO_AFTER_POINT, + dconv_d2s_init(DCONV_D2S_EMIT_TRAILING_DECIMAL_POINT | DCONV_D2S_EMIT_TRAILING_ZERO_AFTER_POINT | DCONV_D2S_EMIT_POSITIVE_EXPONENT_SIGN, csInf, csNan, 'e', DCONV_DECIMAL_IN_SHORTEST_LOW, DCONV_DECIMAL_IN_SHORTEST_HIGH, 0, 0); PRINTMARK(); diff --git a/tests/test_ujson.py b/tests/test_ujson.py index b11e5d2..ea8a17f 100644 --- a/tests/test_ujson.py +++ b/tests/test_ujson.py @@ -78,6 +78,11 @@ def test_double_long_decimal_issue(): assert sut == decoded +@pytest.mark.parametrize("val", [1e10, 1e15, 1e16, 1e20]) +def test_encode_float_string_rep(val): + assert ujson.dumps(val) == json.dumps(val) + + def test_encode_decode_long_decimal(): sut = {"a": -528656961.4399388} encoded = ujson.dumps(sut)