Compare commits

...

2 Commits

Author SHA1 Message Date
slark-yuxj be60d05ede
Merge b64963332f into cb8693b058 2023-07-09 18:15:48 +08:00
“uinontech_yuxiaojun” b64963332f fix:print_number() print incorrect integer 2022-01-21 09:47:56 +08:00
1 changed files with 15 additions and 8 deletions

23
cJSON.c
View File

@ -568,15 +568,22 @@ static cJSON_bool print_number(const cJSON * const item, printbuffer * const out
}
else
{
/* Try 15 decimal places of precision to avoid nonsignificant nonzero digits */
length = sprintf((char*)number_buffer, "%1.15g", d);
if(item->valuedouble == item->valueint)
{
length = sprintf((char*)number_buffer, "%d", item->valueint);
}
else
{
/* Try 15 decimal places of precision to avoid nonsignificant nonzero digits */
length = sprintf((char*)number_buffer, "%1.15g", d);
/* Check whether the original double can be recovered */
if ((sscanf((char*)number_buffer, "%lg", &test) != 1) || !compare_double((double)test, d))
{
/* If not, print with 17 decimal places of precision */
length = sprintf((char*)number_buffer, "%1.17g", d);
}
/* Check whether the original double can be recovered */
if ((sscanf((char*)number_buffer, "%lg", &test) != 1) || !compare_double((double)test, d))
{
/* If not, print with 17 decimal places of precision */
length = sprintf((char*)number_buffer, "%1.17g", d);
}
}
}
/* sprintf failed or buffer overrun occurred */