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

时间:2011-11-13 06:21:46

标签: java math

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

int currentSize = 4079;
int totalSize = 500802;

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

百分比始终等于百分比。 为什么呢?

8 个答案:

答案 0 :(得分:8)

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

int percentage = currentSize * 100 / totalSize;

如果您担心四舍五入,可以使用

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

这避免了使用double或float值的费用。

答案 1 :(得分:4)

你正在使用'int's for currentSize和totalSize导致整数除法删除小数部分,产生0.因此百分比总是为0.

将其更改为float percentage = (((float)currentSize/totalSize) * 100);,一切都会好起来

答案 2 :(得分:1)

我认为currentSizetotalSizeint

currentSize = 4079;
totalSize = 500802;

如果是,则currentSize/totalSize是整数除法。结果将没有小数部分(小数部分被删除,没有向上舍入)。因此,结果为0

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

(double) currentSize

在计算之后,如果您希望结果存储在int中,则必须进行转换(将double转换为int;删除小数部分)。

int percentage = (int) ((double) currentSize ...

整个代码是:

int currentSize = 3;
int totalSize = 100;

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

答案 3 :(得分:0)

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

答案 4 :(得分:0)

如果currentSize和totalSize是整数,则此计算将执行integer division,,这会将您的分数截断为0.使用双精度。

答案 5 :(得分:0)

将您的代码更改为:

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

希望它会对你有所帮助。 :)

答案 6 :(得分:0)

  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) + "%");

答案 7 :(得分:-1)

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

使其中一个操作数为浮点数或双精度数 例如int x = 1;      double y = 3.0;

x / y给出0.333333

其中1/3导致0。