由于某种原因,我的数学只返回0.值已设定,我已检查过。
int currentSize = 4079;
int totalSize = 500802;
int percentage = ((currentSize/totalSize) * 100);
progdialog.setProgress(percentage);
百分比始终等于百分比。 为什么呢?
答案 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)
我认为currentSize
和totalSize
是int
。
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)
使其中一个操作数为浮点数或双精度数 例如int x = 1; double y = 3.0;
x / y给出0.333333
其中1/3导致0。