diff --git a/millify/__init__.py b/millify/__init__.py index ed58dfa..8af905b 100644 --- a/millify/__init__.py +++ b/millify/__init__.py @@ -1,6 +1,4 @@ -import math import re -from decimal import Decimal __author__ = "Alexander Zaitsev (azaitsev@gmail.com)" __copyright__ = "Copyright 2018, azaitsev@gmail.com" @@ -8,11 +6,6 @@ __version__ = "0.1.1" -def remove_exponent(d): - """Remove exponent.""" - return d.quantize(Decimal(1)) if d == d.to_integral() else d.normalize() - - def millify(n, precision=0, drop_nulls=True, prefixes=[]): """Humanize number.""" millnames = ['', 'k', 'M', 'B', 'T', 'P', 'E', 'Z', 'Y'] @@ -20,12 +13,16 @@ def millify(n, precision=0, drop_nulls=True, prefixes=[]): millnames = [''] millnames.extend(prefixes) n = float(n) - millidx = max(0, min(len(millnames) - 1, - int(math.floor(0 if n == 0 else math.log10(abs(n)) / 3)))) - result = '{:.{precision}f}'.format(n / 10**(3 * millidx), precision=precision) + millidx = 0 + while abs(n) >= 1000: + millidx += 1 + n = round(n / 1000.0, precision) + if n < 1000: + n = round(n, precision) + result = '{}'.format(n) if drop_nulls: - result = remove_exponent(Decimal(result)) - return '{0}{dx}'.format(result, dx=millnames[millidx]) + result = result.rstrip('0').rstrip('.') + return '{}{dx}'.format(result, dx=millnames[millidx]) def prettify(amount, separator=','):