Enable Javascript in your browser and then refresh this page, for a much enhanced experience.
First solution in Clear category for Friendly Number by knagaev
import math
def friendly_number(number, base=1000, decimals=0, suffix='',
powers=['', 'k', 'M', 'G', 'T', 'P', 'E', 'Z', 'Y']):
if number == 0:
number_repr = '{:.{decim}f}'.format(0, decim=decimals)
else:
log_number = math.log(abs(number), base)
power_log_part = min(int(log_number), len(powers) - 1)
valued_part = base ** (log_number - power_log_part)
number_repr = ('-' if number < 0 else '') + ('{:.{decim}f}'.format(valued_part + 0.1 ** (decimals + 2), decim=decimals) if decimals > 0 else str(int(valued_part + 0.01))) + powers[power_log_part]
return number_repr + suffix
#These "asserts" using only for self-checking and not necessary for auto-testing
if __name__ == '__main__':
assert friendly_number(102) == '102', '102'
assert friendly_number(10240) == '10k', '10k'
assert friendly_number(12341234, decimals=1) == '12.3M', '12.3M'
assert friendly_number(12461, decimals=1) == '12.5k', '12.5k'
assert friendly_number(1024000000, base=1024, suffix='iB') == '976MiB', '976MiB'
Nov. 26, 2014