Skip to content

Instantly share code, notes, and snippets.

@pencil
Last active August 29, 2015 13:57
Show Gist options
  • Save pencil/9690706 to your computer and use it in GitHub Desktop.
Save pencil/9690706 to your computer and use it in GitHub Desktop.
IEC_PREFIXES = ['', 'Ki', 'Mi', 'Gi', 'Ti', 'Pi', 'Ei', 'Zi', 'Yi']
SI_PREFIXES = ['', 'K', 'M', 'G', 'T', 'P', 'E', 'Z', 'Y']
def human_readable_size(size, precision = 2, use_iec_prefix = false)
size = size.to_f
if use_iec_prefix
prefixes = IEC_PREFIXES
base = 1024
else
prefixes = SI_PREFIXES
base = 1000
end
if size == 0
prefix_index = 0
else
prefix_index = [(Math.log(size.abs) / Math.log(base)).floor, prefixes.length - 1].min
end
beautified_size = (size / (base ** prefix_index)).round(precision)
"#{beautified_size} #{prefixes[prefix_index]}B"
end
puts human_readable_size(0, 2, true)
puts human_readable_size(-53687091200, 2, true)
puts human_readable_size(536870912000000000000000000000000000000000000)
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment