Skip to content

Commit

Permalink
fix: update pydecimal algorithm to ensure left part is not generate…
Browse files Browse the repository at this point in the history
…d with a leading 0 (#1994)
  • Loading branch information
alexei committed Feb 16, 2024
1 parent c3cd386 commit 695f500
Showing 1 changed file with 17 additions and 2 deletions.
19 changes: 17 additions & 2 deletions faker/providers/python/__init__.py
Original file line number Diff line number Diff line change
Expand Up @@ -262,6 +262,21 @@ def _safe_random_int(self, min_value: float, max_value: float, positive: bool) -
def pyint(self, min_value: int = 0, max_value: int = 9999, step: int = 1) -> int:
return self.generator.random_int(min_value, max_value, step=step)

def _random_int_of_length(self, length: int) -> int:
"""Generate a random integer of a given length
If length is 0, so is the number. Otherwise the first digit must not be 0.
"""

if length < 0:
raise ValueError("Length must be a non-negative integer.")
elif length == 0:
return 0
else:
min_value = 10 ** (length - 1)
max_value = (10**length) - 1
return self.pyint(min_value=min_value, max_value=max_value)

def pydecimal(
self,
left_digits: Optional[int] = None,
Expand Down Expand Up @@ -310,15 +325,15 @@ def pydecimal(
min_left_digits = math.ceil(math.log10(max(min_value or 1, 1)))
if left_digits is None:
left_digits = self.random_int(min_left_digits, max_left_random_digits)
left_number = "".join([str(self.random_digit()) for i in range(0, left_digits)]) or "0"
left_number = str(self._random_int_of_length(left_digits))
else:
if min_value is not None:
left_number = str(self.random_int(int(max(max_value or 0, 0)), int(abs(min_value))))
else:
min_left_digits = math.ceil(math.log10(abs(min(max_value or 1, 1))))
if left_digits is None:
left_digits = self.random_int(min_left_digits, max_left_random_digits)
left_number = "".join([str(self.random_digit()) for i in range(0, left_digits)]) or "0"
left_number = str(self._random_int_of_length(left_digits))

if right_digits is None:
right_digits = self.random_int(0, max_random_digits)
Expand Down

0 comments on commit 695f500

Please sign in to comment.