两个整数操作数的Java除法不起作用?
由于某种原因,我的数学只返回0。值已设置,我已检查两个整数操作数的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 将其更改为浮动百
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) + "%");