mirror of
https://github.com/json-c/json-c.git
synced 2026-03-20 05:29:07 +08:00
Issue #486: append a missing ".0" to negative double values too.
This commit is contained in:
@@ -810,6 +810,7 @@ static int json_object_double_to_json_string_format(struct json_object* jso,
|
|||||||
{
|
{
|
||||||
const char *std_format = "%.17g";
|
const char *std_format = "%.17g";
|
||||||
int format_drops_decimals = 0;
|
int format_drops_decimals = 0;
|
||||||
|
int looks_numeric = 0;
|
||||||
|
|
||||||
if (!format)
|
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)
|
if (format == std_format || strstr(format, ".0f") == NULL)
|
||||||
format_drops_decimals = 1;
|
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 &&
|
if (size < (int)sizeof(buf) - 2 &&
|
||||||
isdigit((unsigned char)buf[0]) && /* Looks like *some* kind of number */
|
looks_numeric &&
|
||||||
!p && /* Has no decimal point */
|
!p && /* Has no decimal point */
|
||||||
strchr(buf, 'e') == NULL && /* Not scientific notation */
|
strchr(buf, 'e') == NULL && /* Not scientific notation */
|
||||||
format_drops_decimals)
|
format_drops_decimals)
|
||||||
{
|
{
|
||||||
// Ensure it looks like a float, even if snprintf didn't,
|
// Ensure it looks like a float, even if snprintf didn't,
|
||||||
// unless a custom format is set to omit the decimal.
|
// unless a custom format is set to omit the decimal.
|
||||||
|
|||||||
@@ -74,4 +74,8 @@ int main()
|
|||||||
printf("ERROR: json_c_set_serialization_double_format() failed");
|
printf("ERROR: json_c_set_serialization_double_format() failed");
|
||||||
|
|
||||||
json_object_put(obj);
|
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));
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -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(%.0f)=12
|
||||||
obj(12.0).to_string(%.0g)=1e+01
|
obj(12.0).to_string(%.0g)=1e+01
|
||||||
obj(12.0).to_string(%.1g)=12.0
|
obj(12.0).to_string(%.1g)=12.0
|
||||||
|
obj(-12.0).to_string(default format)=-12.0
|
||||||
|
|||||||
Reference in New Issue
Block a user