Skip to content

Commit 695f500

Browse files
authored
fix: update pydecimal algorithm to ensure left part is not generated with a leading 0 (#1994)
1 parent c3cd386 commit 695f500

File tree

1 file changed

+17
-2
lines changed

1 file changed

+17
-2
lines changed

faker/providers/python/__init__.py

+17-2
Original file line numberDiff line numberDiff line change
@@ -262,6 +262,21 @@ def _safe_random_int(self, min_value: float, max_value: float, positive: bool) -
262262
def pyint(self, min_value: int = 0, max_value: int = 9999, step: int = 1) -> int:
263263
return self.generator.random_int(min_value, max_value, step=step)
264264

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+
265280
def pydecimal(
266281
self,
267282
left_digits: Optional[int] = None,
@@ -310,15 +325,15 @@ def pydecimal(
310325
min_left_digits = math.ceil(math.log10(max(min_value or 1, 1)))
311326
if left_digits is None:
312327
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))
314329
else:
315330
if min_value is not None:
316331
left_number = str(self.random_int(int(max(max_value or 0, 0)), int(abs(min_value))))
317332
else:
318333
min_left_digits = math.ceil(math.log10(abs(min(max_value or 1, 1))))
319334
if left_digits is None:
320335
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))
322337

323338
if right_digits is None:
324339
right_digits = self.random_int(0, max_random_digits)

0 commit comments

Comments
 (0)