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
BCMath ライブラリを使用できます。
$bytes = '976971268097697126809769712680976971268097697126809769712680';
$Gb = bcdiv($bytes, bcpow(1024, 3), 2);
echo $Gb; // 909875396730096197509923682250992368225099236822509.92
これが正しく表現されていない理由がわかりません(私にとってはうまくいきます)。
いずれにせよ、一般的に PHP でコンパイルされるBC Math ライブラリを使用して、任意の長さの数値で方程式を解くことができます。
あなたの場合、次のようになります。
$value = bcdiv('9769712680', '1073741824', 4); /// 1024^3=1073741824