如何在 Python 中精确地将 MB 转换为 GB [重复]

Posted

技术标签:

【中文标题】如何在 Python 中精确地将 MB 转换为 GB [重复]【英文标题】:How to convert MB to GB with precision in Python [duplicate] 【发布时间】:2016-09-02 03:47:26 【问题描述】:

将以 MB 和 KB 为单位的值转换为 GB 和 TB 的最快方法是什么?

sizes = ['999.992 MB', '2.488 GB', '401 KB']

sizes_in_GB = ['?', '?', '?']

sizes_in_TB = ['?', '?', '?']

【问题讨论】:

鉴于您的示例数据,至少有两个阶段:(1)解析这些字符串(2)进行计算。你的问题到底是什么?定义精度!简单的方法只是一个 (vectorized = numpy) 乘法。不太简单/高性能的方法将使用decimal(以获得最大精度) numpy 解决方案效果很好。请举例说明! 给出一个 numpy 的例子是一种浪费工作,没有关于你的数据的更多信息(它决定了哪种方法好,哪种方法不好)。如果你的sizes数组不大,就不用numpy了。 【参考方案1】:

给定:

>>> sizes = ['999.992 MB', '2.488 GB', '401 KB']

首先就“精度”的含义达成一致。由于您的输入是浮点数,因此“精度”仅限于输入精度是一个公平的假设。

要计算,首先转换为基本字节(尽管您的实际精度并不比输入精度好):

>>> defs='KB':1024, 'MB':1024**2, 'GB':1024**3, 'TB':1024**4 
>>> bytes=[float(lh)*defs[rh] for lh, rh in [e.split() for e in sizes]]
>>> bytes
[1048567611.392, 2671469658.112, 410624.0]

然后转换为所需的幅度:

>>> sd='GB'
>>> [':0.2 '.format(e/defs[sd], sd) for e in bytes]
['0.98 GB', '2.5 GB', '0.00038 GB']
>>> sd='MB'
>>> [':0.2 '.format(e/defs[sd], sd) for e in bytes]
['1e+03 MB', '2.5e+03 MB', '0.39 MB']
>>> sd='TB'
>>> [':0.2 '.format(e/defs[sd], sd) for e in bytes]
['0.00095 TB', '0.0024 TB', '3.7e-07 TB']

【讨论】:

【参考方案2】:

这是我在网上找到的。

def conv_KB_to_MB(input_kilobyte):
        megabyte = 1./1000
        convert_mb = megabyte * input_kilobyte
        return convert_mb
def conv_MB_to_GB(input_megabyte):
        gigabyte = 1.0/1024
        convert_gb = gigabyte * input_megabyte
        return convert_gb
#Create the menu


print "Enter 1 to convert from KBs to MBs"
print "Enter 2 to convert from MBs to GBs"


try:
        menu_choice = (raw_input("Enter a selection"))
except ValueError:
        print "This is not a number"
except NameError:
        print "Name Error"
except SystenError:
        print "Syntax Error"

if menu_choice == '1':
        kb_input = float(input("Enter KBs"))
        megabytes = conv_KB_to_MB(kb_input)
        print megabytes

elif menu_choice == '2':
        mb_input = float(input("Enter MBs"))
        gigabytes = conv_MB_to_GB(mb_input)
        print gigabytes
else:
        print "exiting"

来源:http://www.sfentona.net/?p=1965

【讨论】:

这是超级丑。如果我完全使用 fp-arithmetic,我会总是更喜欢 1.0/1024 而不是 float(0.000976562) 但是一个千兆字节是1024兆字节,所以在MB到GB的转换中不应该有9e-7这样的数字。常量应该是一样的吧? @EL_DON 至少两个数字应该相同 修复了 mbs 的 gb 转换 Idk 数学 @sascha 他们应该是 1./1024。

以上是关于如何在 Python 中精确地将 MB 转换为 GB [重复]的主要内容,如果未能解决你的问题,请参考以下文章

Python 电子邮件包:如何可靠地将多部分消息转换/解码为 str

可以在 Python 中简单地将 Decimal('5E+1') 转换为 Decimal('50') 吗?

如何正确地将 cv::Mat 转换为具有完美匹配值的 torch::Tensor?

有效地将字符串转换为 python 2.7 的 unicode

递归地将python对象图转换为字典

如何将字符串精确转换为字节?