diff options
Diffstat (limited to '')
| -rw-r--r-- | xs_json.h | 15 |
1 files changed, 14 insertions, 1 deletions
| @@ -93,7 +93,20 @@ d_char *_xs_json_dumps(d_char *s, char *data, int level, int indent) | |||
| 93 | case XSTYPE_NUMBER: | 93 | case XSTYPE_NUMBER: |
| 94 | { | 94 | { |
| 95 | char tmp[32]; | 95 | char tmp[32]; |
| 96 | snprintf(tmp, sizeof(tmp), "%g", xs_number_get(data)); | 96 | snprintf(tmp, sizeof(tmp), "%.15f", xs_number_get(data)); |
| 97 | |||
| 98 | /* strip useless zeros */ | ||
| 99 | if (strchr(tmp, '.') != NULL) { | ||
| 100 | char *ptr; | ||
| 101 | |||
| 102 | for (ptr = tmp + strlen(tmp) - 1; *ptr == '0'; ptr--); | ||
| 103 | |||
| 104 | if (*ptr != '.') | ||
| 105 | ptr++; | ||
| 106 | |||
| 107 | *ptr = '\0'; | ||
| 108 | } | ||
| 109 | |||
| 97 | s = xs_str_cat(s, tmp); | 110 | s = xs_str_cat(s, tmp); |
| 98 | } | 111 | } |
| 99 | break; | 112 | break; |