Java 将long除以long返回0

Java 将long除以long返回0,java,Java,我试图计算Windows中已用磁盘空间的百分比,totaldrive表示c驱动器的总磁盘空间(以Long为单位),freedrive表示Long中的可用空间(以Long为单位) long totaloccupied = totaldrive - freedrive; 这里计算使用率的百分比 Long Percentageused =(totaloccupied/totaldrive*100); System.out.println(Percentageused); print语句返回0

我试图计算Windows中已用磁盘空间的百分比,totaldrive表示c驱动器的总磁盘空间(以Long为单位),freedrive表示Long中的可用空间(以Long为单位)

 long totaloccupied = totaldrive - freedrive;
这里计算使用率的百分比

 Long Percentageused =(totaloccupied/totaldrive*100);
 System.out.println(Percentageused);

print语句返回0。有人能帮忙吗?因为我没有得到从左到右计算的所需值,第一个整数除法将返回0(例如8/10计算为0)。将值转换为浮点数或执行100*a/b。浮点数将为您提供更精确的结果。

您正在进行整数除法!由于
totaloccumposed
小于
totaldrive
,因此两者的除法给出了答案
0
。您应首先转换为双精度:

double percentageUsed = 100.0 * totalOccupied / totalDrive;

请注意,将小数点添加到
100
可确保它被视为
双精度

您可能正在将一个long除以一个long,这是指(long/long=long)操作,给出一个长结果(在您的情况下为0)

通过将除法的任一操作数强制转换为浮点类型,可以实现同样的效果

Long Percentageused = (long)((float)totaloccupied/totaldrive*100);

呵呵。这是漫长的一天,我享受着顺流而下的漂流……你为什么用
long
而不是
long
?另外,请查看Java命名约定的
percentageUsed
float
如果涉及的数字较大,则不会给出更精确的结果。如果使用(float)(100*a)/(float)b,则会给出更精确的结果。双方的差异相对较小,这是造成精度损失最多的一个数量级。顺便说一句,无论是谁通过并否决了这里的每个答案,请留下建设性的意见。如果目标是整数百分比,100*a/b解决方案,a和b都很长,将很好地工作。Float或double只需要得到“85.5%”这样的答案。如果TotalOccessed和totalDrive都很长,那么即使乘以100.0也会得到0.0