@@ -151,7 +151,7 @@ void jim_bool(Jim *jim, int boolean)
151
151
jim_element_end (jim );
152
152
}
153
153
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 )
155
155
{
156
156
if (x < 0 ) {
157
157
jim_write_cstr (jim , "-" );
@@ -169,6 +169,11 @@ static void jim_integer_no_element(Jim *jim, long long int x)
169
169
x /= 10 ;
170
170
}
171
171
172
+ while (lzeros > 0 ) {
173
+ buffer [count ++ ] = '0' ;
174
+ -- lzeros ;
175
+ }
176
+
172
177
for (size_t i = 0 ; i < count / 2 ; ++ i ) {
173
178
char t = buffer [i ];
174
179
buffer [i ] = buffer [count - i - 1 ];
@@ -182,7 +187,7 @@ static void jim_integer_no_element(Jim *jim, long long int x)
182
187
void jim_integer (Jim * jim , long long int x )
183
188
{
184
189
jim_element_begin (jim );
185
- jim_integer_no_element (jim , x );
190
+ jim_integer_no_element (jim , x , 0 );
186
191
jim_element_end (jim );
187
192
}
188
193
@@ -199,18 +204,20 @@ void jim_float(Jim *jim, double x, int precision)
199
204
} else {
200
205
jim_element_begin (jim );
201
206
202
- jim_integer_no_element (jim , (long long int ) x );
207
+ jim_integer_no_element (jim , (long long int ) x , 0 );
203
208
x -= (double ) (long long int ) x ;
209
+ int lzeros = 0 ;
204
210
while (precision -- > 0 ) {
205
211
x *= 10.0 ;
212
+ lzeros += -1 < x && x < 1 ;
206
213
}
207
214
jim_write_cstr (jim , "." );
208
215
209
216
long long int y = (long long int ) x ;
210
217
if (y < 0 ) {
211
218
y = - y ;
212
219
}
213
- jim_integer_no_element (jim , y );
220
+ jim_integer_no_element (jim , y , lzeros );
214
221
215
222
jim_element_end (jim );
216
223
}
0 commit comments