Realising the best unit

Posted by Katie McLaughlin on January 30, 2015

Sometimes, you want to visualise things, but you get a weird unit and a less than ideal number. 100000 bytes? What does that even mean in “human” terms?

So, here’s a short python script to help with that. Give it an integer, and it’s base unit, and it’ll work up to the most “human” unit (biggest unit that does a positive outcome). [0]

def realise(value, unit, inc=1024):   
	""" From a value and a unit, try and work out what's best """
	units = ["B","KB","MB","GB","TB","PB"]

	factor = 1
	for i in range(5):
		if value >= (inc ** i):
			factor = i

	new_unit = units[units.index(unit) + factor]
	return (inc ** factor, new_unit)

tests = [ [10000000, "B"], [1024, "KB"], [4000, "MB"]]

for value, unit in tests: 
	factor, new_unit = realise(value, unit)
	print "With %d at %s, got %d, so value is better as %d %s" % \
		(value, unit, factor, new_unit, value / factor, new_unit)

[0] this code assumes the “standard” base-2 incrementors. 1024 B -> 1 KB, etc. The mathematics behind this and the argument that these should be “kibibytes” is not within the scope of this blog post. I’ll get to that.. one day..