def mod(ctx, number, divisor): """ Returns the remainder after number is divided by divisor """ number = conversions.to_decimal(number, ctx) divisor = conversions.to_decimal(divisor, ctx) return number - divisor * _int(ctx, number / divisor)
def _min(ctx, *number): """ Returns the minimum value of all arguments """ if len(number) == 0: raise ValueError("Wrong number of arguments") result = conversions.to_decimal(number[0], ctx) for arg in number[1:]: arg = conversions.to_decimal(arg, ctx) if arg < result: result = arg return result
def _int(ctx, number): """ Rounds a number down to the nearest integer """ return conversions.to_integer( conversions.to_decimal(number, ctx).to_integral_value(ROUND_FLOOR), ctx)
def roundup(ctx, number, num_digits): """ Rounds a number up, away from zero """ number = conversions.to_decimal(number, ctx) num_digits = conversions.to_integer(num_digits, ctx) return decimal_round(number, num_digits, ROUND_UP)
def rounddown(ctx, number, num_digits): """ Rounds a number down, toward zero """ number = conversions.to_decimal(number, ctx) num_digits = conversions.to_integer(num_digits, ctx) return decimal_round(number, num_digits, ROUND_DOWN)
def _round(ctx, number, num_digits): """ Rounds a number to a specified number of digits """ number = conversions.to_decimal(number, ctx) num_digits = conversions.to_integer(num_digits, ctx) return decimal_round(number, num_digits, ROUND_HALF_UP)
def _sum(ctx, *number): """ Returns the sum of all arguments """ if len(number) == 0: raise ValueError("Wrong number of arguments") result = Decimal(0) for arg in number: result += conversions.to_decimal(arg, ctx) return result
def _power(ctx, number, power): """ Returns the result of a number raised to a power """ return decimal_pow(conversions.to_decimal(number, ctx), conversions.to_decimal(power, ctx))
def _abs(ctx, number): """ Returns the absolute value of a number """ return conversions.to_decimal(abs(conversions.to_decimal(number, ctx)), ctx)
def _int(ctx, number): """ Rounds a number down to the nearest integer """ return conversions.to_integer(conversions.to_decimal(number, ctx).to_integral_value(ROUND_FLOOR), ctx)
def exp(ctx, number): """ Returns e raised to the power of number """ return decimal_pow(E, conversions.to_decimal(number, ctx))
def percent(ctx, number): """ Formats a number as a percentage """ return "%d%%" % int(round(conversions.to_decimal(number, ctx) * 100))
def trunc(ctx, number): """ Truncates a number to an integer by removing the fractional part of the number """ return conversions.to_integer(conversions.to_decimal(number, ctx).to_integral_value(ROUND_DOWN), ctx)
def percent(ctx, number): """ Formats a number as a percentage """ return '%d%%' % int(round(conversions.to_decimal(number, ctx) * 100))
def trunc(ctx, number): """ Truncates a number to an integer by removing the fractional part of the number """ return conversions.to_integer( conversions.to_decimal(number, ctx).to_integral_value(ROUND_DOWN), ctx)
def epoch(ctx, datetime): """ Converts the given date to the number of seconds since January 1st, 1970 UTC """ return conversions.to_decimal( str(conversions.to_datetime(datetime, ctx).timestamp()), ctx)