Skip to content

Commit 540ba0d

Browse files
committed
fixed floating number leading zeroes serialization
1 parent ec7fe1d commit 540ba0d

File tree

1 file changed

+11
-4
lines changed

1 file changed

+11
-4
lines changed

jim2.h

Lines changed: 11 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -151,7 +151,7 @@ void jim_bool(Jim *jim, int boolean)
151151
jim_element_end(jim);
152152
}
153153

154-
static void jim_integer_no_element(Jim *jim, long long int x)
154+
static void jim_integer_no_element(Jim *jim, long long int x, int lzeros)
155155
{
156156
if (x < 0) {
157157
jim_write_cstr(jim, "-");
@@ -169,6 +169,11 @@ static void jim_integer_no_element(Jim *jim, long long int x)
169169
x /= 10;
170170
}
171171

172+
while (lzeros > 0) {
173+
buffer[count++] = '0';
174+
--lzeros;
175+
}
176+
172177
for (size_t i = 0; i < count / 2; ++i) {
173178
char t = buffer[i];
174179
buffer[i] = buffer[count - i - 1];
@@ -182,7 +187,7 @@ static void jim_integer_no_element(Jim *jim, long long int x)
182187
void jim_integer(Jim *jim, long long int x)
183188
{
184189
jim_element_begin(jim);
185-
jim_integer_no_element(jim, x);
190+
jim_integer_no_element(jim, x, 0);
186191
jim_element_end(jim);
187192
}
188193

@@ -199,18 +204,20 @@ void jim_float(Jim *jim, double x, int precision)
199204
} else {
200205
jim_element_begin(jim);
201206

202-
jim_integer_no_element(jim, (long long int) x);
207+
jim_integer_no_element(jim, (long long int) x, 0);
203208
x -= (double) (long long int) x;
209+
int lzeros = 0;
204210
while (precision-- > 0) {
205211
x *= 10.0;
212+
lzeros += -1 < x && x < 1;
206213
}
207214
jim_write_cstr(jim, ".");
208215

209216
long long int y = (long long int) x;
210217
if (y < 0) {
211218
y = -y;
212219
}
213-
jim_integer_no_element(jim, y);
220+
jim_integer_no_element(jim, y, lzeros);
214221

215222
jim_element_end(jim);
216223
}

0 commit comments

Comments
 (0)