mirror of
https://github.com/Brandon-Rozek/website.git
synced 2024-10-30 01:12:07 -04:00
1.3 KiB
1.3 KiB
date | draft | math | medium_enabled | medium_post_id | tags | title |
---|---|---|---|---|---|---|
2021-03-15 23:11:35 | false | true | true | 2a32b08bd2c1 | Human Readable Sizes |
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]