]> git.ipfire.org Git - thirdparty/json-c.git/commitdiff
bugfix: floating point representaion without fractional part
authorJan Gerhards <jgerhards@adiscon.com>
Sun, 27 Nov 2016 10:47:00 +0000 (11:47 +0100)
committerJan Gerhards <jgerhards@adiscon.com>
Sun, 27 Nov 2016 10:47:00 +0000 (11:47 +0100)
closes https://github.com/json-c/json-c/issues/278

json_object.c
tests/test_parse.expected

index c65941ea32f289b760987f46fd5fdc27be24e1f0..139d8578a6c3b309b27b040a10f471bc47d82c42 100644 (file)
@@ -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) {
index 215800118689efbbb74ea1ff03fe5ee6a94916b5..713d3186859c20f4a65cff1da6e813d7b679c118 100644 (file)
@@ -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 ]
 ==================================