试图将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