尝试将9769712680字节转换为千兆字节。我有以下代码:
$value = 9769712680 / (1024 * 1024 * 1024);
这应该给出9 Gb的值,但它给出2047 Mb(或2 Gb)。
还试过:9769712680 / 1024 / 1024 / 1024
但这也做同样的事情。
有什么想法吗?
答案 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