2

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

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

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

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

有任何想法吗?

4

4 回答 4

5

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

于 2013-03-19T22:17:06.963 回答
0

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

9769712680/(1024*1024*1024) = 9.09875396639109

double(int32(9769712680))/(1024*1024*1024) = 2
于 2013-03-19T22:19:17.157 回答
0

我不知道为什么这没有正确表示(它确实对我有用)。
无论如何,您可以使用通常用 PHP 编译的BC 数学库来求解具有任意长度数字的方程。

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

$value = bcdiv('9769712680', '1073741824', 4); /// 1024^3=1073741824
于 2013-03-19T22:31:37.407 回答
0

您可以使用BCMath 库

$bytes = '976971268097697126809769712680976971268097697126809769712680';
$Gb = bcdiv($bytes, bcpow(1024, 3), 2);
echo $Gb; // 909875396730096197509923682250992368225099236822509.92
于 2013-03-19T22:32:17.010 回答