Skip to content

Commit

Permalink
bugfix: floating point representaion without fractional part
Browse files Browse the repository at this point in the history
closes json-c#278
  • Loading branch information
jgerhards committed Nov 27, 2016
1 parent d050f1e commit ca7a197
Show file tree
Hide file tree
Showing 2 changed files with 6 additions and 3 deletions.
5 changes: 4 additions & 1 deletion json_object.c
Expand Up @@ -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
Expand All @@ -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) {
Expand Down
4 changes: 2 additions & 2 deletions tests/test_parse.expected
Expand Up @@ -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 ]
==================================
Expand Down

0 comments on commit ca7a197

Please sign in to comment.