两个整数操作数的Java除法不起作用?

两个整数操作数的Java除法不起作用?,java,math,Java,Math,由于某种原因,我的数学只返回0。值已设置,我已检查 int currentSize = 4079; int totalSize = 500802; int percentage = ((currentSize/totalSize) * 100); progdialog.setProgress(percentage); 百分比总是等于百分比。 为什么?您对currentSize和totalSize使用“int”,这会导致整数除法,从而删除小数部分,得到0。因此,百分比始终为0 将其更改为浮动百

由于某种原因,我的数学只返回0。值已设置,我已检查

int currentSize = 4079;
int totalSize = 500802;

int percentage = ((currentSize/totalSize) * 100);
progdialog.setProgress(percentage);
百分比总是等于百分比。
为什么?

您对currentSize和totalSize使用“int”,这会导致整数除法,从而删除小数部分,得到0。因此,百分比始终为0


将其更改为<代码>浮动百分比=((浮动)currentSize/totalSize)*100)一切都会好起来的

您正在对currentSize和totalSize使用'int',结果是整数除法,除掉小数部分,得到0。因此,百分比始终为0


将其更改为<代码>浮动百分比=((浮动)currentSize/totalSize)*100)一切都会好起来的

,因为您的计算结果是一个值小于1的双精度值。你把它放在一个整数中,这样它会截断小数点分隔符后面的所有内容,结果是零。请尝试将该值存储在一个double中。

因为您的计算结果是一个值小于1的double。你把它放在一个整数中,这样它会截断小数点分隔符后面的所有内容,结果是零。请尝试将该值存储在双精度中。

如果currentSize和totalSize是整数,则此计算可以将分数截断为0。使用双精度。

如果currentSize和totalSize是整数,则此计算将完成,并将分数截断为0。使用双精度编码。

将代码更改为:

double percentage = ((double)(currentSize/totalSize) * 100);
progdialog.setProgress(percentage);

希望这对你有帮助。:)

将代码更改为:

double percentage = ((double)(currentSize/totalSize) * 100);
progdialog.setProgress(percentage);

希望这对你有帮助。:)

正如其他人所指出的,问题是整数除法会将任何小于1的值变成0。这发生在乘以100之前。您可以更改操作顺序以获得更好的结果:

int percentage = currentSize * 100 / totalSize;
如果您关心舍入,可以使用

int percentage = (currentSize * 100 + (totalSize >> 1)) / totalSize;

这避免了使用双精度或浮点值的开销。

正如其他人指出的,问题是整数除法会将任何小于1的值变为零。这发生在乘以100之前。您可以更改操作顺序以获得更好的结果:

int percentage = currentSize * 100 / totalSize;
如果您关心舍入,可以使用

int percentage = (currentSize * 100 + (totalSize >> 1)) / totalSize;

这些避免了使用双值或浮点值的开销。

我假设
currentSize
totalSize
int

currentSize = 4079;
totalSize = 500802;
如果是,则
currentSize/totalSize
是整数除法。结果将不包含小数部分(小数部分被删除,不进行取整)。因此,结果是
0

如果其中一个操作数是双精度的,则除法的结果将是分数。因此,我将一个整数操作数转换为双精度

(double) currentSize
计算后,如果希望结果存储在
int
,则必须强制转换(将double转换为int;删除小数部分)

整个守则是:

int currentSize = 3;
int totalSize = 100;

int percentage = (int) ((double) currentSize / totalSize * 100);
System.out.println(percentage);

我假设
currentSize
totalSize
int

currentSize = 4079;
totalSize = 500802;
如果是,则
currentSize/totalSize
是整数除法。结果将不包含小数部分(小数部分被删除,不进行取整)。因此,结果是
0

如果其中一个操作数是双精度的,则除法的结果将是分数。因此,我将一个整数操作数转换为双精度

(double) currentSize
计算后,如果希望结果存储在
int
,则必须强制转换(将double转换为int;删除小数部分)

整个守则是:

int currentSize = 3;
int totalSize = 100;

int percentage = (int) ((double) currentSize / totalSize * 100);
System.out.println(percentage);

如果分子和分母都是整数且结果小于1,则整数的Java除法产生零。 修正:

将操作数设为浮点数或双精度 e、 g.int x=1; 双y=3.0

x/y为0.333


式中,as 1/3表示0。

如果分子和分母都是整数,且结果小于1,则整数的Java除法表示零。
  double occupancyRate = 0.0;
  int occupiedRoomsTotal = 12;
  int totalRooms = 20;

  occupancyRate = (((double) occupiedRoomsTotal / totalRooms)) * 100;
  DecimalFormat df2 = new DecimalFormat("#.##");
  System.out.println("Occupancy Rate = " + df2.format(occupancyRate) + "%");
修正:

将操作数设为浮点数或双精度 e、 g.int x=1; 双y=3.0

x/y为0.333


as 1/3等于0。

让我猜:
currentSize
totalSize
都是整数…@神秘的是,我已经有一段时间没有用Java编程了,我知道这会非常愚蠢。编辑:哦,我的上帝。哇!它必须是一个小数,不是吗?我想开始在答案中编语法,比如“只使用
currentSize.0/totalSize.0
”。或者你可以做(currentSize*100)/totalSize,如果你想要的只是一个整数百分比。让我猜:
currentSize
totalSize
都是整数…@神秘的是,我已经有一段时间没有用Java编程了,我知道这会非常愚蠢。编辑:哦,我的上帝。哇!它需要是一个小数,不是吗?我想开始在答案中编写语法,比如“只使用
currentSize.0/totalSize.0
”。或者,如果您只需要一个整数百分比,也可以使用(currentSize*100)/totalSize。得到的百分比变量还需要是浮点或双精度,否则,如果百分比小于1,则仍然为零,如示例中所示。哇。一分钟内回答三个问题。谢谢各位。逻辑错误。现在是凌晨3点。正确-将其更改为
float percentage=((float)currentSize/totalSize)*100)我认为最好将常数100也设为100.0,以便在上面的计算中用作双精度hopp有一个更好的答案(如果您决定接受答案,即),得到的百分比变量也需要是浮点或双精度,否则,如果百分比小于1,则仍然为零,如示例中所示。哇。一分钟内回答三个问题。谢谢各位。逻辑错误。现在是凌晨3点。正确-将其更改为
float percentage=((float)currentSize/totalSize)*100)我认为最好将常数100也设为100.0,以便在上面的计算中用作双精度hopp有更好的答案(在案例y中
  double occupancyRate = 0.0;
  int occupiedRoomsTotal = 12;
  int totalRooms = 20;

  occupancyRate = (((double) occupiedRoomsTotal / totalRooms)) * 100;
  DecimalFormat df2 = new DecimalFormat("#.##");
  System.out.println("Occupancy Rate = " + df2.format(occupancyRate) + "%");