如何在java中查找百分比我的代码给出错误?

时间:2012-02-29 12:00:28

标签: java jsp

我正在尝试获取百分比,但我的代码为“0.0”,而totalMemoryusageMemory都有值我也设置了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");

请帮助我,我做错了,非常感谢这方面的任何帮助。

提前致谢!

3 个答案:

答案 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));

待验证