试图将 9769712680 字节转换为千兆字节。我有以下代码:
$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
我不知道为什么这没有正确表示(它确实对我有用)。
无论如何,您可以使用通常用 PHP 编译的BC 数学库来求解具有任意长度数字的方程。
在您的情况下,它看起来像这样:
$value = bcdiv('9769712680', '1073741824', 4); /// 1024^3=1073741824
您可以使用BCMath 库:
$bytes = '976971268097697126809769712680976971268097697126809769712680';
$Gb = bcdiv($bytes, bcpow(1024, 3), 2);
echo $Gb; // 909875396730096197509923682250992368225099236822509.92