ped*_*dja 14 java double int operation division
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;
}
Run Code Online (Sandbox Code Playgroud)
这是一种应返回GB,MB,KB或TB大小的方法.输入值以KB为单位.例如1245的结果应该像1.21MB,但我得到的是1.00MB.
bic*_*ter 37
修改后的版本.只调用一次格式.包括"字节".
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;
}
Run Code Online (Sandbox Code Playgroud)
Roh*_*ain 27
你在表演integer division
.所以划分的结果也是integer
.小数部分被截断.
so, 1245 / 1024 = 1
Run Code Online (Sandbox Code Playgroud)
将您的部门改为floating point division
: -
double m = size/1024.0;
double g = size/1048576.0;
double t = size/1073741824.0;
Run Code Online (Sandbox Code Playgroud)
此外,您的比较是错误的.你应该做比较1
.
if (m > 1), if (t > 1), if (g > 1)
Run Code Online (Sandbox Code Playgroud)
理想情况下,我会将您的比较改为: -
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");
}
Run Code Online (Sandbox Code Playgroud)
您需要先与较高的单位进行比较,然后再移到较低的单位.
Sam*_*isa 11
我喜欢这个:
public static String getDynamicSpace(long diskSpaceUsed)
{
if (diskSpaceUsed <= 0) {
return "0";
}
final String[] units = new String[] { "B", "KiB", "MiB", "GiB", "TiB" };
int digitGroups = (int) (Math.log10(diskSpaceUsed) / Math.log10(1024));
return new DecimalFormat("#,##0.#").format(diskSpaceUsed / Math.pow(1024, digitGroups))
+ " " + units[digitGroups];
}
Run Code Online (Sandbox Code Playgroud)
问题是你正在使用整数除法.将您的代码更改为:
double m = size/1024.0;
double g = size/1048576.0;
double t = size/1073741824.0;
Run Code Online (Sandbox Code Playgroud)
在原始代码中,double m = size/1024
将整数size
除以1024
,将结果截断为整数,然后将其转换为double
.这就是分数部分迷失的原因.
归档时间: |
|
查看次数: |
53206 次 |
最近记录: |