@@ -262,6 +262,21 @@ def _safe_random_int(self, min_value: float, max_value: float, positive: bool) -
262
262
def pyint (self , min_value : int = 0 , max_value : int = 9999 , step : int = 1 ) -> int :
263
263
return self .generator .random_int (min_value , max_value , step = step )
264
264
265
+ def _random_int_of_length (self , length : int ) -> int :
266
+ """Generate a random integer of a given length
267
+
268
+ If length is 0, so is the number. Otherwise the first digit must not be 0.
269
+ """
270
+
271
+ if length < 0 :
272
+ raise ValueError ("Length must be a non-negative integer." )
273
+ elif length == 0 :
274
+ return 0
275
+ else :
276
+ min_value = 10 ** (length - 1 )
277
+ max_value = (10 ** length ) - 1
278
+ return self .pyint (min_value = min_value , max_value = max_value )
279
+
265
280
def pydecimal (
266
281
self ,
267
282
left_digits : Optional [int ] = None ,
@@ -310,15 +325,15 @@ def pydecimal(
310
325
min_left_digits = math .ceil (math .log10 (max (min_value or 1 , 1 )))
311
326
if left_digits is None :
312
327
left_digits = self .random_int (min_left_digits , max_left_random_digits )
313
- left_number = "" . join ([ str (self .random_digit ()) for i in range ( 0 , left_digits )]) or "0"
328
+ left_number = str (self ._random_int_of_length ( left_digits ))
314
329
else :
315
330
if min_value is not None :
316
331
left_number = str (self .random_int (int (max (max_value or 0 , 0 )), int (abs (min_value ))))
317
332
else :
318
333
min_left_digits = math .ceil (math .log10 (abs (min (max_value or 1 , 1 ))))
319
334
if left_digits is None :
320
335
left_digits = self .random_int (min_left_digits , max_left_random_digits )
321
- left_number = "" . join ([ str (self .random_digit ()) for i in range ( 0 , left_digits )]) or "0"
336
+ left_number = str (self ._random_int_of_length ( left_digits ))
322
337
323
338
if right_digits is None :
324
339
right_digits = self .random_int (0 , max_random_digits )
0 commit comments