]> granicus.if.org Git - json-c/commitdiff
Issue #486: append a missing ".0" to negative double values too.
authorEric Haszlakiewicz <erh+git@nimenees.com>
Tue, 28 May 2019 02:44:22 +0000 (02:44 +0000)
committerEric Haszlakiewicz <erh+git@nimenees.com>
Tue, 28 May 2019 02:44:22 +0000 (02:44 +0000)
json_object.c
tests/test_double_serializer.c
tests/test_double_serializer.expected

index 344af515ecb664dbd19b24f9e21476170dbc7cb1..026dab313bf5df78358b4baca7c3d41dee93d27b 100644 (file)
@@ -810,6 +810,7 @@ static int json_object_double_to_json_string_format(struct json_object* jso,
        {
                const char *std_format = "%.17g";
                int format_drops_decimals = 0;
+               int looks_numeric = 0;
 
                if (!format)
                {
@@ -837,11 +838,15 @@ static int json_object_double_to_json_string_format(struct json_object* jso,
                if (format == std_format || strstr(format, ".0f") == NULL)
                        format_drops_decimals = 1;
 
+               looks_numeric = /* Looks like *some* kind of number */
+                   isdigit((unsigned char)buf[0]) ||
+                   (size > 1 && buf[0] == '-' && isdigit((unsigned char)buf[1]));
+
                if (size < (int)sizeof(buf) - 2 &&
-                   isdigit((unsigned char)buf[0]) && /* Looks like *some* kind of number */
-                       !p && /* Has no decimal point */
+                   looks_numeric &&
+                   !p && /* Has no decimal point */
                    strchr(buf, 'e') == NULL && /* Not scientific notation */
-                       format_drops_decimals)
+                   format_drops_decimals)
                {
                        // Ensure it looks like a float, even if snprintf didn't,
                        //  unless a custom format is set to omit the decimal.
index 0f7a60ea742e50f68ec641094237462baff8818a..21612c8ab372f24a5397693897bd1f2ea7bbb1af 100644 (file)
@@ -74,4 +74,8 @@ int main()
                printf("ERROR: json_c_set_serialization_double_format() failed");
 
        json_object_put(obj);
+
+       obj = json_object_new_double(-12.0);
+       printf("obj(-12.0).to_string(default format)=%s\n", json_object_to_json_string(obj));
+
 }
index 98eea1e13b9021db72157a837932d4a2dcf33f26..d3aef72477d62af608784be6e44057e1ba3f8407 100644 (file)
@@ -16,3 +16,4 @@ obj(12.0).to_string(default format)=12.0
 obj(12.0).to_string(%.0f)=12
 obj(12.0).to_string(%.0g)=1e+01
 obj(12.0).to_string(%.1g)=12.0
+obj(-12.0).to_string(default format)=-12.0