AMLSim / scripts /amlsim /rounded_amount.py
dingyiz's picture
Upload folder using huggingface_hub
2795186 verified
import random
import math
class RoundedAmount:
def __init__(self, min, max):
self.min = min
self.max = max
def getAmount(self):
min = int(self.min)
max = int(self.max)
range = max - min
tentative_step_size = self.__round_up_to_power_of_ten(range)
# i.e. 10, 100, 1000
power_of_ten = self.__get_step_size(tentative_step_size, range)
num_digits_power_of_ten = self.__number_of_digits(power_of_ten)
start = min
if (power_of_ten > 1):
start = self.__get_starting_value(min, num_digits_power_of_ten)
result = random.randrange(start, max + 1, power_of_ten)
return float(result)
def __get_step_size(self, step_size, range):
slots = range // step_size
if (slots >= 7 and slots <= 30):
return step_size
if (slots < 7):
new_step_size = step_size // 10
if new_step_size == 0:
return new_step_size
return self.__get_step_size(new_step_size, range)
return self.__get_step_size(step_size * 10, range)
def __round_up_to_power_of_ten(self, num):
exp = math.ceil(math.log10(num))
return 10 ** exp
def __number_of_digits(self, num):
digits = int(math.log10(num)) + 1
return digits
def __get_starting_value(self, min, num_digits_stepsize):
value = round(min, num_digits_stepsize * -1)
if value < min:
value += 10 ** (num_digits_stepsize - 1)
return value