Perl模块在MB / GB / TB之间转换而不先转换为字节?

时间:2013-07-31 19:20:38

标签: perl module byte number-formatting

我正在尝试通过将空闲物理范围的数量乘以范围大小来计算LVM物理卷上的可用空间,例如:

3623365 free extents * 4.00 MB each = 13.8 TB

我正在使用Number::Format将范围大小转换为字节并将乘法结果转换回人类可读的字符串,但不支持TB和更高版本,因此我最终得到的更长,更少可读14,153.8 GB

根据文档,不支持TB和up的原因是因为32位系统上的整数溢出,这让我想知道我是否应该在不使用像Math::BigInt这样的东西的情况下乘以任意大数。我看到Number::Bytes::Human支持的数字高达YB(yottabytes),但它仍处于alpha状态,因此我不愿在生产代码中使用它。

我的下一个想法是,为什么当我可以计算MB中的可用空间然后转换为TB时,首先转换为字节?不幸的是,似乎Number::FormatNumber::Bytes::Human都不支持从一个“后缀”到另一个“后缀”的转换,例如MB - > TB。是否有现有的模块可以做到这一点?我真的很喜欢Number::FormatNumber::Bytes::Human如何处理SI /非SI单位(MB与MiB),允许您设置精度等等,因此如果类似的话,我会犹豫是否推出自己的解决方案功能齐全的模块已经完成了。

编辑:范围大小并不总是以MB为单位,自由空间也不总是在TB中,所以我不会问如何从MB转换为TB(这将是微不足道的)。我询问是否有任何现有的模块可以从一个[任意]后缀转换为另一个,而不先转换为字节。

1 个答案:

答案 0 :(得分:1)

要通过字节转换为MB到TB:

TB数= MB数* * 1 TB /字节中的字节数(1 MB)

<小时/> 更新: 要概括:

新单位数量=旧单位数*(1个新单位的字节数/ 1个旧单位的字节数)