字节到千兆字节的转换不工作


Byte to gigabyte conversion not working

试图将9769712680字节转换为gb。我有以下代码:

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

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

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

任何想法?

9769712680 -这里有整数溢出,所以它变成了2^31,最大int值

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

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

我不知道为什么这不是正确的表示(它确实为我工作)。
无论如何,您可以使用BC Math库(通常与PHP一起编译)来解任意长度的数字方程。

在你的例子中,它看起来像这样:

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

您可以使用BCMath库:

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