首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> 網頁程式設計 >> PHP 程式設計 >> PHP 綜合知識

PHP 與 C# 文件大小格式化對比:對數運算法實現 B/KB/MB/GB/TB 自動轉換

     編輯:PHP 綜合知識

PHP 版

<?php
function format($size) {
    $sizetext = [' B', ' KB', ' MB', ' GB', ' TB', ' PB', ' EB', ' ZB', ' YB'];
    $i = floor(log($size, 1024));
    return round($size / pow(1024, $i), 2) . $sizetext[$i];
}
?>

C# 版

public string FormatSize(long size) {
    if (size == 0) return "0 B";
    string[] sizetext = { " B", " KB", " MB", " GB", " TB", " PB" };
    int i = (int)Math.Floor(Math.Log(size, 1024));
    return Math.Round(size / Math.Pow(1024, i), 2).ToString() + sizetext[i];
}

核心邏輯解析

  1. log(size, 1024) 計算 size 以 1024 為底的對數,得到單位級數(0=B, 1=KB, 2=MB...)。
  2. floor() 取整,確定單位索引 $i。
  3. size / 1024^i 將大小換算為對應單位下的數值。
  4. round(..., 2) 保留兩位小數。
  5. 陣列索引對應單位後綴。

對比總結

特性PHPC#
對數函數log($x, $base)Math.Log(x, base)
冪運算pow(1024, $i)Math.Pow(1024, i)
取整floor()Math.Floor()
四捨五入round($v, 2)Math.Round(v, 2)
類型動態弱類型強類型 (long/double)
邊界處理需額外判斷 0显式 if (size==0)

邊界與擴展

  • size = 0:對數未定義,需單獨返回 "0 B"。
  • 極大值:超過陣列長度時需 min($i, count($units)-1) 避免越界。
  • 負數:文件大小不應為負,可取絕對值或拋出異常。
  • 國際單位制 (SI):若需 1000 進制(kB/MB/GB),將底數改為 1000,單位改為 kB/MB/GB(大小寫區分)。
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved