@register.filter(is_safe=True) def smartround(num): """ rounds floats in more human readable format e.g. 341.123434 mUSD -> 341mUSD 0.45345345 mUSD -> 0.5mUSD 0.034545 mUSD -> 0.03mUSD 0.0014545 mUSD -> 0.001mUSD etc. """ if isinstance(num, float): whole_part, dec_part = str(num).split(".") whole_part_len = len(whole_part) if whole_part_len > 3: return int(num) else: try: round_to = re.search(r'[^0]', dec_part).start() return round(num, round_to+1) except AttributeError: return int(num) return num