I saw someone shared code similar to this. Share a piece of code that supports arbitrarily large numbers and is quite simple.
- function formatFileSize($fileSize)
- {
- $unit = array(' Bytes', ' KB', ' MB', ' GB', ' TB', ' PB', ' EB', ' ZB', ' YB');
- $i = 0;
-
- /*
- while($fileSize >= 1024 && $i < 8)
- {
- $fileSize /= 1024;
- ++$i;
- }
- * /
- /*
- The above code can also be optimized
- Since computers do multiplication faster than division
- */
- $inv = 1 / 1024;
-
- while($fileSize >= 1024 && $i < 8)
- {
- $fileSize *= $inv;
- ++$i;
- }
-
- //return sprintf("%.2f", $fileSize) . $unit[$i];
-
- // Correct the previous result to Integer, but the output is a floating point number with two meaningless 0 decimal places
- $fileSizeTmp = sprintf("%.2f", $fileSize);
-
- // The result of the following code will be correct in 99.99% of cases, Unless you use "super large numbers". :)
- return ($fileSizeTmp - (int)$fileSizeTmp ? $fileSizeTmp : $fileSize) . $unit[$i];
- }
Copy code
- //Test code
- echo formatFileSize(43453765345); // Result: 40.47 GB
-
- echo formatFileSize(4345376534545643543633655244525); // Result: 3594411.22 YB
-
- echo formatFileSize(2048); // Result: 2 KB
Copy code
|