动态转换 KB 为 MB、GB、TB

2022-09-02 11:06:28
public String size(int size){
    String hrSize = "";
    int k = size;
    double m = size/1024;
    double g = size/1048576;
    double t = size/1073741824;

    DecimalFormat dec = new DecimalFormat("0.00");

    if (k>0)
    {

        hrSize = dec.format(k).concat("KB");

    }
    if (m>0)
    {

        hrSize = dec.format(m).concat("MB");
    }
    if (g>0)
    {

        hrSize = dec.format(g).concat("GB");
    }
    if (t>0)
    {

        hrSize = dec.format(t).concat("TB");
    }

    return hrSize;
    }

此方法应以 GB、MB、KB 或 TB 为单位返回大小。输入值以 KB 为单位。例如,1245的结果应该是1.21MB,但我得到的是1.00MB。


答案 1

修改后的版本。仅调用格式化一次。包括“字节”。

public static String formatFileSize(long size) {
    String hrSize = null;

    double b = size;
    double k = size/1024.0;
    double m = ((size/1024.0)/1024.0);
    double g = (((size/1024.0)/1024.0)/1024.0);
    double t = ((((size/1024.0)/1024.0)/1024.0)/1024.0);

    DecimalFormat dec = new DecimalFormat("0.00");

    if ( t>1 ) {
        hrSize = dec.format(t).concat(" TB");
    } else if ( g>1 ) {
        hrSize = dec.format(g).concat(" GB");
    } else if ( m>1 ) {
        hrSize = dec.format(m).concat(" MB");
    } else if ( k>1 ) {
        hrSize = dec.format(k).concat(" KB");
    } else {
        hrSize = dec.format(b).concat(" Bytes");
    }

    return hrSize;
}

答案 2

您正在执行 .所以除法的结果也是.小数部分被截断。integer divisioninteger

so, 1245 / 1024 = 1

将您的除法更改为 : -floating point division

double m = size/1024.0;
double g = size/1048576.0;
double t = size/1073741824.0;

此外,您的比较是错误的。您应该与 进行比较。1

if (m > 1), if (t > 1), if (g > 1)

理想情况下,我会将您的比较更改为: -

    if (t > 1) {
        hrSize = dec.format(t).concat("TB");
    } else if (g > 1) {
        hrSize = dec.format(g).concat("GB");
    } else if (m > 1) {
        hrSize = dec.format(m).concat("MB");
    } else {
        hrSize = dec.format(size).concat("KB");
    }

您需要先与较高的单位进行比较,然后转到较低的单位。


推荐