字节到千兆字节转换无法正常工作

时间:2013-03-19 22:15:30

标签: php math

尝试将9769712680字节转换为千兆字节。我有以下代码:

$value = 9769712680 / (1024 * 1024 * 1024);

这应该给出9 Gb的值,但它给出2047 Mb(或2 Gb)。

还试过:9769712680 / 1024 / 1024 / 1024但这也做同样的事情。

有什么想法吗?

4 个答案:

答案 0 :(得分:5)

9769712680 - 这里有整数溢出,因此它变为2^31,即max int值。

答案 1 :(得分:0)

看起来初始号码表示为int32。做一些数学运算(使用Matlab):

9769712680/(1024*1024*1024) = 9.09875396639109

double(int32(9769712680))/(1024*1024*1024) = 2

答案 2 :(得分:0)

我不知道为什么这个代表不对(它对我有用) 无论如何,你可以使用通常用PHP编译的BC Math library来解决任何长度数的方程式。

在你的情况下,它看起来像这样:

$value = bcdiv('9769712680', '1073741824', 4); /// 1024^3=1073741824

答案 3 :(得分:0)

您可以使用BCMath library

$bytes = '976971268097697126809769712680976971268097697126809769712680';
$Gb = bcdiv($bytes, bcpow(1024, 3), 2);
echo $Gb; // 909875396730096197509923682250992368225099236822509.92