diff --git a/app/utils/filters/__init__.py b/app/utils/filters/__init__.py index ac08bc7..224d174 100644 --- a/app/utils/filters/__init__.py +++ b/app/utils/filters/__init__.py @@ -1,3 +1,3 @@ # Register filters here -from app.utils.filters import date, is_title, markdown, pluralize +from app.utils.filters import date, humanize, is_title, markdown, pluralize diff --git a/app/utils/filters/humanize.py b/app/utils/filters/humanize.py new file mode 100644 index 0000000..22901bd --- /dev/null +++ b/app/utils/filters/humanize.py @@ -0,0 +1,26 @@ +from app import app + + +@app.template_filter('humanize') +def humanize(n:float, sd:int=4, unit:str=''): + """ + Print the number human-readable. + n: number + sd: significant digits + unit: unit + Ex: humanize(12345, 2, "o") → 12.34 ko + """ + + suffixes = ['k', 'M', 'G', 'T', 'P'] + suffix = '' + + for s in suffixes: + if abs(n) > 10**3: + n /= 10**3 + suffix = s + else: + break + + formatter = f"{{:.{sd}n}}{{}}{{}}{{}}" + spacer = ' ' if suffix + unit != '' else '' + return formatter.format(float(n), spacer, suffix, unit)