diff --git a/jim2.h b/jim2.h index 59044d9..11dc7c0 100644 --- a/jim2.h +++ b/jim2.h @@ -151,7 +151,7 @@ void jim_bool(Jim *jim, int boolean) jim_element_end(jim); } -static void jim_integer_no_element(Jim *jim, long long int x) +static void jim_integer_no_element(Jim *jim, long long int x, int lzeros, int rtrim) { if (x < 0) { jim_write_cstr(jim, "-"); @@ -169,12 +169,24 @@ static void jim_integer_no_element(Jim *jim, long long int x) x /= 10; } + while (lzeros > 0) { + buffer[count++] = '0'; + --lzeros; + } + for (size_t i = 0; i < count / 2; ++i) { char t = buffer[i]; buffer[i] = buffer[count - i - 1]; buffer[count - i - 1] = t; } + if (rtrim && count != 0) { + while (count != 1 && buffer[count - 1] == '0') { + buffer[count - 1] = '\0'; + --count; + } + } + jim_write(jim, buffer, count); } } @@ -182,7 +194,7 @@ static void jim_integer_no_element(Jim *jim, long long int x) void jim_integer(Jim *jim, long long int x) { jim_element_begin(jim); - jim_integer_no_element(jim, x); + jim_integer_no_element(jim, x, 0, 0); jim_element_end(jim); } @@ -199,10 +211,12 @@ void jim_float(Jim *jim, double x, int precision) } else { jim_element_begin(jim); - jim_integer_no_element(jim, (long long int) x); + jim_integer_no_element(jim, (long long int) x, 0, 0); x -= (double) (long long int) x; + int lzeros = 0; while (precision-- > 0) { x *= 10.0; + lzeros += -1 < x && x < 1; } jim_write_cstr(jim, "."); @@ -210,7 +224,7 @@ void jim_float(Jim *jim, double x, int precision) if (y < 0) { y = -y; } - jim_integer_no_element(jim, y); + jim_integer_no_element(jim, y, lzeros, 1); jim_element_end(jim); }