@@ -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)
182187void 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