Skip to content

Instantly share code, notes, and snippets.

@ayorgo
Last active April 14, 2019 11:19
Show Gist options
  • Save ayorgo/c9a094ca7ddf8742870b63c296c5ec03 to your computer and use it in GitHub Desktop.
Save ayorgo/c9a094ca7ddf8742870b63c296c5ec03 to your computer and use it in GitHub Desktop.
Python gists
from math import log
def abbreviate(value, base=1000, precision=2, suffixes=None):
if suffixes is None:
suffixes = ['', 'K', 'M', 'B', 'T']
if value == 0:
return f'{0}{suffixes[0]}'
order_max = len(suffixes) - 1
order = min(int(log(abs(value), base)), order_max)
factor = lambda val: round(val/base**order, precision)
factored = factor(value)
if abs(factored) == base and order < order_max:
order += 1
factored = factor(value)
return f'{factored:,g}{suffixes[order]}'
def abbreviate_short(value, base=1000, precision=2, suffixes=None):
if suffixes is None:
suffixes = ['', 'K', 'M', 'B', 'T']
if value == 0:
return f'{0}{suffixes[0]}'
order_max = len(suffixes) - 1
order = log(abs(value), base)
order_corr = order - int(order) >= log(base - 0.5/10**precision, base)
order = min(int(order) + order_corr, order_max)
factored = round(value/base**order, precision)
return f'{factored:,g}{suffixes[order]}'
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment