Money Utilities

Ratio Split

hordak.utilities.money.ratio_split(amount, ratios, precision=None)

Split in_value according to the ratios specified in ratios

This is special in that it ensures the returned values always sum to in_value (i.e. we avoid losses or gains due to rounding errors). As a result, this method returns a list of Decimal values with length equal to that of ratios.

Examples

>>> from hordak.utilities.money import ratio_split
>>> from decimal import Decimal
>>> ratio_split(Decimal('10'), [Decimal('1'), Decimal('2')])
[Decimal('3.33'), Decimal('6.67')]

Note the returned values sum to the original input of 10. If we were to do this calculation in a naive fashion then the returned values would likely be 3.33 and 6.66, which would sum to 9.99, thereby loosing 0.01.

Parameters:
  • amount (Decimal) – The amount to be split

  • ratios (list[Decimal]) – The ratios that will determine the split

  • precision (Optional[Decimal]) – How many decimal places to round to (defaults to the HORDAK_DECIMAL_PLACES setting)

Returns: list(Decimal)