我正在尝试获取百分比,但我的代码为“0.0”,而totalMemory
和usageMemory
都有值我也设置了4位小数,但结果是“0.0000”我的代码是,
private static long maxMemory=0;
private static long freeMemory=0;
private static long totalMemory=0;
private static long usageMemory=0;
private static double Percentage;
Runtime runtime=Runtime.getRuntime();
maxMemory=runtime.maxMemory();
freeMemory=runtime.freeMemory();
totalMemory=runtime.totalMemory();
usageMemory=totalMemory-freeMemory;
Percentage=((usageMemory/totalMemory)*100.0);
//NumberFormat percentage =NumberFormat.getPercentInstance();
//percentage = new DecimalFormat("0.0#%");
//String pr = percentage.format(Percentage);
System.out.print(Percentage);
System.out.print("Total Memory:"+totalMemory+"\n");
System.out.print("Memory Usage:"+usageMemory+"\n");
请帮助我,我做错了,非常感谢这方面的任何帮助。
提前致谢!
答案 0 :(得分:5)
这是因为你使用长型。长类型不处理小数。
使用double而不是
我解释说:将两个长结果分成一个长(因此它在乘以100之前被舍入)。
代码:
double totalMemory;
double freeMemory;....
totalMemory=runtime.getTotalMemory()...
或者如果你想留长型:
percentage=(((double)usageMemory/(double)totalMemory)*100d);
答案 1 :(得分:0)
将usageMemory和totalMemory转换/转换为double。
答案 2 :(得分:0)
正如@JeromeC所说。在“division”(usageMemory / totaMemory)中,这是一个给出0的integerdivision。你需要先将long转换为double,然后再进行除法。
请注意,从long到double的转换在java中是自动的。您不需要特定的铸造。因此,只需将变量重新定义为double而不是Long。
private static double maxMemory=0;
private static double freeMemory=0;
private static double totalMemory=0;
private static double usageMemory=0;
但也许在你的情况下,最好是不做任何事情,只是改变顺序。在除法之前进行乘法运算。
Percentage=((100.0*usageMemory)/(100.0*totalMemory));
待验证