試圖將9769712680字節轉換爲千兆字節。我有以下代碼:字節到千兆字節轉換不起作用
$value = 9769712680/(1024 * 1024 * 1024);
這應該給出9 Gb的值,但它會給出2047 Mb(或2 Gb)。
也試過:9769712680/1024/1024/1024
但這也是同樣的事情。
任何想法?
試圖將9769712680字節轉換爲千兆字節。我有以下代碼:字節到千兆字節轉換不起作用
$value = 9769712680/(1024 * 1024 * 1024);
這應該給出9 Gb的值,但它會給出2047 Mb(或2 Gb)。
也試過:9769712680/1024/1024/1024
但這也是同樣的事情。
任何想法?
9769712680
- 你在這裏有整數溢出,所以它變成2^31
,即max int值。
im在64位系統上,數據來自XML文件,使用foreach加載該值,然後$ value = 9769712680 /(1024 * 1024 * 1024); – user2080473 2013-03-19 22:43:52
@ user2080473什麼是確切類型的號碼?很明顯,你以某種方式得到最大的int32而不是你的號碼。 – Andrey 2013-03-19 22:46:55
9769712680是斧標號 如果我做$ value = $ test; echo「$ test」我得到號碼9769712680 – user2080473 2013-03-19 22:57:42
看起來最初的數字表示爲int32
。做一些數學(使用Matlab):
9769712680/(1024*1024*1024) = 9.09875396639109
double(int32(9769712680))/(1024*1024*1024) = 2
我不知道爲什麼這不是正確的代表(它對我有用)。
無論如何,您可以使用通常用PHP編譯的BC Math library來解決任意長度的數字的方程式。
在你的情況是這樣的:
$value = bcdiv('9769712680', '1073741824', 4); /// 1024^3=1073741824
您可以使用BCMath library:
$bytes = '976971268097697126809769712680976971268097697126809769712680';
$Gb = bcdiv($bytes, bcpow(1024, 3), 2);
echo $Gb; // 909875396730096197509923682250992368225099236822509.92
64位或32位系統上你? 32位系統上的最大整數大小爲2147483647,即大約2G。 – 2013-03-19 22:18:14
重複http://stackoverflow.com/questions/211345/working-with-large-numbers-in-php? – MatRt 2013-03-19 22:20:43
儘管這應該仍然有效,但PHP使用浮點數表示帶符號int範圍之外的數字。我剛剛嘗試過'echo 9769712680 /(1024 * 1024 * 1024);'在使用32位版本的Windows系統上,它會產生預期的'9.0987 ...'。你能顯示你從哪裏獲得數據?避免將任何內容投射到整數,因爲這會將值修剪回界限。 – DaveRandom 2013-03-19 22:27:36