mirror of
https://github.com/json-c/json-c.git
synced 2026-04-08 14:59:06 +08:00
Merge pull request #289 from jgerhards/i-278
bugfix: floating point representaion without fractional part
This commit is contained in:
@@ -693,6 +693,7 @@ static int json_object_double_to_json_string_format(struct json_object* jso,
|
|||||||
{
|
{
|
||||||
char buf[128], *p, *q;
|
char buf[128], *p, *q;
|
||||||
int size;
|
int size;
|
||||||
|
double dummy; /* needed for modf() */
|
||||||
/* Although JSON RFC does not support
|
/* Although JSON RFC does not support
|
||||||
NaN or Infinity as numeric values
|
NaN or Infinity as numeric values
|
||||||
ECMA 262 section 9.8.1 defines
|
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");
|
size = snprintf(buf, sizeof(buf), "-Infinity");
|
||||||
else
|
else
|
||||||
size = snprintf(buf, sizeof(buf),
|
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, ',');
|
p = strchr(buf, ',');
|
||||||
if (p) {
|
if (p) {
|
||||||
|
|||||||
@@ -7,6 +7,7 @@ LIBJSON_LA=$(top_builddir)/libjson-c.la
|
|||||||
|
|
||||||
TESTS=
|
TESTS=
|
||||||
TESTS+= test_util_file.test
|
TESTS+= test_util_file.test
|
||||||
|
TESTS+= test_float.test
|
||||||
TESTS+= test1.test
|
TESTS+= test1.test
|
||||||
TESTS+= test2.test
|
TESTS+= test2.test
|
||||||
TESTS+= test4.test
|
TESTS+= test4.test
|
||||||
|
|||||||
24
tests/test_float.c
Normal file
24
tests/test_float.c
Normal file
@@ -0,0 +1,24 @@
|
|||||||
|
/* Copyright (C) 2016 by Rainer Gerhards
|
||||||
|
* Released under ASL 2.0 */
|
||||||
|
#include "config.h"
|
||||||
|
#include <stdio.h>
|
||||||
|
#include "../json_object.h"
|
||||||
|
#include "../json_tokener.h"
|
||||||
|
int main(void)
|
||||||
|
{
|
||||||
|
json_object *json;
|
||||||
|
|
||||||
|
json = json_object_new_double(1.0);
|
||||||
|
printf("json = %s\n", json_object_to_json_string_ext(json, JSON_C_TO_STRING_PRETTY));
|
||||||
|
json_object_put(json);
|
||||||
|
json = json_object_new_double(1.23);
|
||||||
|
printf("json = %s\n", json_object_to_json_string_ext(json, JSON_C_TO_STRING_PRETTY));
|
||||||
|
json_object_put(json);
|
||||||
|
json = json_object_new_double(123456789.0);
|
||||||
|
printf("json = %s\n", json_object_to_json_string_ext(json, JSON_C_TO_STRING_PRETTY));
|
||||||
|
json_object_put(json);
|
||||||
|
json = json_object_new_double(123456789.123);
|
||||||
|
printf("json = %s\n", json_object_to_json_string_ext(json, JSON_C_TO_STRING_PRETTY));
|
||||||
|
json_object_put(json);
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
4
tests/test_float.expected
Normal file
4
tests/test_float.expected
Normal file
@@ -0,0 +1,4 @@
|
|||||||
|
json = 1.0
|
||||||
|
json = 1.23
|
||||||
|
json = 123456789.0
|
||||||
|
json = 123456789.123
|
||||||
12
tests/test_float.test
Executable file
12
tests/test_float.test
Executable file
@@ -0,0 +1,12 @@
|
|||||||
|
#!/bin/sh
|
||||||
|
|
||||||
|
# Common definitions
|
||||||
|
if test -z "$srcdir"; then
|
||||||
|
srcdir="${0%/*}"
|
||||||
|
test "$srcdir" = "$0" && srcdir=.
|
||||||
|
test -z "$srcdir" && srcdir=.
|
||||||
|
fi
|
||||||
|
. "$srcdir/test-defs.sh"
|
||||||
|
|
||||||
|
run_output_test test_float
|
||||||
|
exit $?
|
||||||
@@ -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()={ "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": 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()={ "abc": "blue\nred\ngreen" }
|
||||||
new_obj.to_string()=[ 0 ]
|
new_obj.to_string()=[ 0.0 ]
|
||||||
new_obj.to_string()=[ 0 ]
|
new_obj.to_string()=[ 0.0 ]
|
||||||
new_obj.to_string()=null
|
new_obj.to_string()=null
|
||||||
new_obj.to_string()=[ 9223372036854775807 ]
|
new_obj.to_string()=[ 9223372036854775807 ]
|
||||||
==================================
|
==================================
|
||||||
|
|||||||
Reference in New Issue
Block a user