Java计算平均值时如何避免取整?求正确实现方法
Java整数除法导致平均值取整问题的解决办法
问题场景
我是Java新手,最近做实验任务时遇到一个问题:任务要求编写程序接收任意数量非负整数输入,输入负数时结束(且负数不纳入统计,确保至少有一个非负整数输入),最后输出最大值和保留两位小数的平均值。示例输入15 20 0 3 -1对应输出20 9.50。
我的代码大部分功能正常,但计算平均值时出现取整错误——比如输入2 3 -1,程序输出3 2.00,而正确结果应该是3 2.50。
原代码
int count = 0; int sumNums = 0; int totalSumNums = 0; double average = 0; int bigNumber = -1; sumNums = scnr.nextInt(); while (sumNums >= 0) { if (sumNums > bigNumber) { bigNumber = sumNums; } totalSumNums = totalSumNums + sumNums; count = count + 1; sumNums = scnr.nextInt(); } average = totalSumNums / count; System.out.print(bigNumber + " "); System.out.printf("%.2f\n", average);
问题原因
问题出在average = totalSumNums / count;这一行:totalSumNums和count都是int类型,Java中两个整数做除法会执行整数除法——直接舍弃小数部分,只保留整数结果。比如5/2得到的是2而不是2.5,即使把这个结果赋值给double类型的average,也只是把2转换成2.0,自然输出2.00。
解决办法
只需要把其中一个操作数强制转换为double类型,让除法自动提升为浮点数除法,就能得到带小数的正确结果:
average = (double)totalSumNums / count;
这样totalSumNums会先被转换成double,count也会自动提升为double,除法结果就是5.0/2=2.5,最终输出2.50,符合要求。
内容的提问来源于stack exchange,提问作者thatlittlerose
相关产品推荐
相关产品推荐

