diff --git a/json_object.c b/json_object.c index c65941ea32..139d8578a6 100644 --- a/json_object.c +++ b/json_object.c @@ -693,6 +693,7 @@ static int json_object_double_to_json_string_format(struct json_object* jso, { char buf[128], *p, *q; int size; + double dummy; /* needed for modf() */ /* Although JSON RFC does not support NaN or Infinity as numeric values ECMA 262 section 9.8.1 defines @@ -706,7 +707,9 @@ static int json_object_double_to_json_string_format(struct json_object* jso, size = snprintf(buf, sizeof(buf), "-Infinity"); else size = snprintf(buf, sizeof(buf), - format ? format : "%.17g", jso->o.c_double); + format ? format : + (modf(jso->o.c_double, &dummy) == 0) ? "%.17g.0" : "%.17g", + jso->o.c_double); p = strchr(buf, ','); if (p) { diff --git a/tests/test_parse.expected b/tests/test_parse.expected index 2158001186..713d318685 100644 --- a/tests/test_parse.expected +++ b/tests/test_parse.expected @@ -31,8 +31,8 @@ new_obj.to_string()={ "foo": "bar", "baz": null, "bool0": true } new_obj.to_string()={ "foo": [ null, "foo" ] } new_obj.to_string()={ "abc": 12, "foo": "bar", "bool0": false, "bool1": true, "arr": [ 1, 2, 3, null, 5 ] } new_obj.to_string()={ "abc": "blue\nred\ngreen" } -new_obj.to_string()=[ 0 ] -new_obj.to_string()=[ 0 ] +new_obj.to_string()=[ 0.0 ] +new_obj.to_string()=[ 0.0 ] new_obj.to_string()=null new_obj.to_string()=[ 9223372036854775807 ] ==================================