Enable Javascript in your browser and then refresh this page, for a much enhanced experience.
maybe slow :-( solution in Clear category for Friendly Number by moke
from math import ceil,floor
from decimal import Decimal
def friendly_number(number, base=1000, decimals=0, suffix='',
powers=['', 'k', 'M', 'G', 'T', 'P', 'E', 'Z', 'Y']):
div_number = -1
if abs(number) < base:
return ("{0:.%df}"%decimals).format(number) + powers[0] + suffix
else:
for i in range(len(powers)-1):
div_number += 1
tem_number = number
number = Decimal(number)/Decimal(base)
if abs(number) < 1 :
res = tem_number
break
if i == len(powers)-2:
div_number += 1
res = number
if decimals == 0:
if res > 0:
return str(floor(res)) + powers[div_number] + suffix
else:
return str(ceil(res)) + powers[div_number] + suffix
else:
return ("{0:.%df}"%decimals).format(res) + powers[div_number] + 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'
Oct. 8, 2016