ActionScript代码将字节转换为kb,mb,gb等

问题描述

| 我有一个实用程序功能,可以像Windows资源管理器一样以适当的形式显示文件大小,即将其转换为最接近的KB,MB,GB等。我想知道我编写的代码是否正确,以及是否可以使其更简单。 我写的功能如下:
public static function formatFileSize(bytes:int):String
    {
        if(bytes < 1024)
            return bytes + \" bytes\";
        else
        {
            bytes /= 1024;
            if(bytes < 1024)
                return bytes + \" Kb\";
            else
            {
                bytes /= 1024;
                if(bytes < 1024)
                    return bytes + \" Mb\";
                else
                {
                    bytes /= 1024;
                    if(bytes < 1024)
                        return bytes + \" Gb\";
                }
            }
        }
        return String(bytes);
    }
尽管目前它为我完成了工作,但我认为它可以以更简单的方式编写,甚至可以进行优化。 提前致谢     

解决方法

这是一种更简单的方法:
private var _levels:Array = [\'bytes\',\'Kb\',\'MB\',\'GB\',\'TB\',\'PB\',\'EB\',\'ZB\',\'YB\'];

private function bytesToString(bytes:Number):String
{
    var index:uint = Math.floor(Math.log(bytes)/Math.log(1024));
    return (bytes/Math.pow(1024,index)).toFixed(2) + this._levels[index];
}
为了完整起见,我将其添加到了yottabytes :)     ,@J_A_X是执行此操作的最佳方法,但是对于将来,我建议您在发现像嵌套嵌套
if...else...if
语句时尽早返回。
public static function formatFileSize(bytes:int):String
{
    if(bytes < 1024)
        return bytes + \" bytes\";

    bytes /= 1024;
    if(bytes < 1024)
        return bytes + \" Kb\";

    bytes /= 1024;
    if(bytes < 1024)
        return bytes + \" Mb\";

    bytes /= 1024;
    if(bytes < 1024)
        return bytes + \" Gb\";

    return String(bytes);
}
    

相关问答

错误1:Request method ‘DELETE‘ not supported 错误还原:...
错误1:启动docker镜像时报错:Error response from daemon:...
错误1:private field ‘xxx‘ is never assigned 按Alt...
报错如下,通过源不能下载,最后警告pip需升级版本 Requirem...