Blog

Brandon Rozek

Photo of Brandon Rozek

Software Developer, Researcher, and Linux Enthusiast.

Human Readable Sizes

Published on

Updated on

When playing with large and small values, it is useful to convert them to a different unit in scientific notation. Let’s look at bytes.

size_categories = ["B", "KB", "MB", "GB", "TB"]

You can figure out how to best represent it by seeing how many of the base (in this case 1000) fits into the value. $$ category = \lfloor \frac{\log{(size_{bytes})}}{\log{(base)}} \rfloor $$ You’ll want to make sure that you don’t overflow in the number of categories you have

category_num = min(category_num, len(size_categories))

You can then get its category representation by $$ size = \frac{size_{bytes}}{(2^{category})} $$ We can wrap this all up info a nice python function

def humanReadableBytes(num_bytes: int) -> str:
    base = 1000
    
    # Zero Case
    if num_bytes == 0:
        return "0"
    
    size_categories = ["B", "KB", "MB", "GB", "TB"]
    category_num = int(math.log(num_bytes) / math.log(base))
    
    # Make sure it doesn't overflow
    category_num = min(category_num, len(size_categories) - 1)
    
    return "{:.2f} ".format(num_bytes / (base ** category_num)) + \
			size_categories[category_num]
Reply via Email

Have you published a response to this? :