首页 > 解决方案 > 人类可读的大小到一个字节范围

问题描述

考虑将多个字节转换为人类可读字符串的函数:

def sizeof_fmt(num, suffix='B'):
    for unit in ['','Ki','Mi','Gi','Ti','Pi','Ei','Zi']:
        if abs(num) < 1024.0:
            return "%3.1f %s%s" % (num, unit, suffix)
        num /= 1024.0
    return "%.1f %s%s" % (num, 'Yi', suffix)

我正在寻找一个函数,给定人类可读的字符串,它将以字节为单位返回该大小(最小,最大)的边界,在小数点后占 1 个数字。例如:

human_readable_to_range('1 KiB') => 1024, 1075 1 KiB 在 1075 处停止,因为 1076 是 1.1 KiB

human_readable_to_range('1.3 KiB') => 1281, 1382

human_readable_to_range('9.7 MiB') => 10118759, 10223615

我尝试以这种方式解决它:

def human_readable_to_range(size):
  MULTIPLIERS = {
    'KiB': 2**10,
    'MiB': 2**20
  }
  number, unit = size.split(' ')
  multiplier = MULTIPLIERS[unit]
  rough_value = float(number) * multiplier
  min_ = rough_value - multiplier * 0.5
  max_ = rough_value + multiplier * 0.5

但是这个解决方案只给出了近似值

标签: pythonmathbyteconverters

解决方案


您可以使用二分搜索:从近似值开始,根据乘数将其设为范围,然后根据值如何转换为人类可读形式来搜索该范围。


推荐阅读